Chapter overview

In this chapter, I focus on the third of my three key questions about the development of representations of mental life: How do people of different ages deploy their conceptual representations of mental life to reason about specific entities in the world? As in Chapters III-IV, to address this question I draw on data from all of the current studies (Studies 1-4); for details about the methods of these studies, see Chapter II. The goal of this chapter is to provide “snapshots” of mental capacity attributions to various target characters in early childhood, middle childhood, and adulthood, and to explore in finer-grained detail more continuous changes in children’s beliefs about the mental lives of these characters between 4-9y of age, with particular attention to children’s assessment of animate vs. inanimate beings.

General analysis plan

High-level overview

In analyzing these datasets with an eye toward documenting the application or deployment of the conceptual representations described in Chapters III-IV, the basic insight is that the attribution of specific mental capacities to specific target characters provides evidence of how conceptual representations of mental life are deployed in everyday social cognition. In Chapter II, I illustrated this with the following example: If participants who assess the mental capacities of Characters 1, 2, and 3 share one general pattern of mental capacity attributions, and participants who assess the mental capacities of Characters 4, 5, and 6 share another pattern, this provides some evidence that conceptual representations of mental life might play a role in structuring representations of (and interactions with) different classes of beings in the world. Here I will translate this general intuition into a specific analysis plan to be applied to each of these datasets in turn.

Details of analyses

XX

Study 1: An adult endpoint

In the context of this dissertation, Study 1 serves to describe a developmental endpoint for conceptual representations of mental life. In this chapter, I focus on what this study can reveal about how US adults use this concept to understand the beings in their world: Which aspects of mental life do they extend to which kinds of target characters? This topic was covered only very briefly in the original publication of this work (Weisman et al., 2017).

To review, Studies 1a-1c employed the “edge case” variant of the general approach, with participants assessing the mental capacities of a beetle, a robot, or both. Studies 1a and 1b were identical: US adults (Study 1a: n=405; Study 1b: n=406) each assessed a single target character on 40 mental capacities. Study 1c employed very similar methods, with the exception that participants (n=200) each assessed both target characters side by side (with left-right position counterbalanced across participants). Because these studies were so similar, in this chapter, I will discuss them in tandem.

Study 1d employed the “diverse characters” variant of the general approach, in which 431 US adults were randomly assigned to assess the same set of 40 mental capacities used in Studies 1a-1d for one of the following 21 target characters: an adult, a child, an infant, a person in a persistent vegetative state, a fetus, a chimpanzee, an elephant, a dolphin, a bear, a dog, a goat, a mouse, a frog, a blue jay, a fish, a beetle, a microbe, a robot, a computer, a car, or a stapler. (See Chapter II and Weisman et al., 2017, for detailed methods.)

Results

Studies 1a-1c

Study 1d

Discussion

Study 2: Conceptual change between middle childhood (7-9y) and adulthood

In the context of this dissertation, Study 2 serves to provide an initial investigation of representations of mental life earlier in development, in what I have called middle childhood (7-9y). In this chapter, I focus on what this study can reveal about changes in the deployment of this concept between middle childhood and adulthood: How do US 7- to 9-year-old children’s attributions of BODY, HEART, and MIND compare to those of adults in their cultural context?

To review, in Study 2, 200 US adults and 200 US children between the ages of 7.01-9.99 years (median: 8.31y) each assessed a single target character on 40 mental capacities. This study employed the “edge case” variant of the general approach, with participants randomly assigned to assess either a beetle or a robot. (See Chapter II for detailed methods.)

Special notes on data processing and analysis

To facilitate comparison between children and adults in Study 2, I use adults’ BODY, HEART, and MIND scales (as described in Chapter IV) to analyze both age groups. For analyses using scales derived from EFA of children’s own responses, see [XX Appendix C].

Results

Adults

Children (7-9y)

Developmental comparison

Children vs. adults

Table 5.1: Regression analyses of age-related differences in BODY, HEART, and MIND scores among the 7- to 9-year-old children in Study 2 (scored using adults' scales, as presented in Chapter IV). For each conceptual unit, the table presents a Bayesian regression with 4 fixed effect parameters: (1) the intercept, which is an index of attributions of that conceptual unit among adults; (2) the overall difference in scores for the beetle compared to the grand mean ('GM') among adults; (3) the difference between children's and adults' scores, collapsing across target characters; and (4) the interactive effect of age group and target character. Age effects are highlighted in bold, because they are the primary parameters of interest for these analyses. For each parameter, the table includes the estimate (b) and a 95% credible interval for that estimate. Asterisks indicate 95% credible intervals that do not include 0.
BODY
HEART
MIND
Parameter b 95% CI b 95% CI b 95% CI
Intercept (adults) 0.41 [ 0.38, 0.44] * 0.11 [ 0.08, 0.15] * 0.75 [ 0.72, 0.78] *
Beetle vs. GM (adults) 0.31 [ 0.28, 0.34] * 0.06 [ 0.02, 0.10] * -0.07 [-0.10, -0.04] *
Children vs. adults 0.18 [ 0.13, 0.22] * 0.43 [ 0.37, 0.49] * 0.00 [-0.05, 0.04]
Interaction -0.07 [-0.11, -0.03] * -0.02 [-0.08, 0.03] 0.02 [-0.02, 0.06]

Children’s BODY scores were generally higher than adults’ (see Table 5.1, “Children vs. adults” row for the BODY domain). This appears to have been particularly true for the robot (see Figure 5.2, top row); as a result, the difference between the beetle and the robot was attenuated among children, relative to adults (see Table 5.1, “Interaction” row for the BODY domain).

Children’s HEART scores were also higher than adults’ (see Table 5.1, “Children vs. adults” row for the HEART domain, and Figure 5.2, middle row), but this difference did not vary substantially across target characters (see Table 5.1, “Interaction” row for the BODY domain).

There were no substantial differences between children and adults in their MIND scores (see Table 5.1 and Figure 5.2, bottom row)

Discussion

Study 3: Conceptual change over early and middle childhood (4-9y)

Study 3 builds on the investigation of middle childhood (7-9y) initiated in Study 2 and extends this exploration of conceptual change into earlier childhood (4-6y). In this chapter, I again focus on what this study can reveal about changes in the deployment of this concept—i.e., the attribution of BODY, HEART, and MIND to various beings in the world—over the course of early and middle childhood (7-9y).

To review, in Study 3, 116 US adults, 125 “older” children (7.08-9.98 years; median: 8.56y), and 124 “younger” children (4.00-6.98 years; median: 5.03y) each assessed a single target character on 20 mental capacities. This study employed the “diverse characters” variant of the general approach, with participants randomly or pseudo-randomly assigned to assess one of the following 9 characters: an elephant, a goat, a mouse, a bird, a beetle, a teddy bear, a doll, a robot, or a computer. (See Chapter II for detailed methods.)

Special notes on data processing and analysis

As in Study 2, to facilitate comparison between the three age groups included in Study 3, I use adults’ BODY, HEART, and MIND scales (as described in Chapter IV) to analyze both age groups. For analyses using scales derived from EFA of children’s own responses, see [XX Appendix C].

Results

Adults

Children (7-9y)

Children (4-6y)

Developmental comparison

Children vs. adults

Table 5.3: Regression analyses of age-related differences in BODY, HEART, and MIND scores among the 4- to 9-year-old children in Study 3 (scored using adults' scales, as presented in Chapter IV). For each conceptual unit, the table presents a Bayesian regression with 4 fixed effect parameters: (1) the intercept, which is an index of attributions of that conceptual unit among adults; (2) the overall difference in scores for the animate characters compared to the grand mean ('GM') among adults; (3) the difference between children's and adults' scores, collapsing across target characters; and (4) the interactive effect of age group and animacy status. Age effects are highlighted in bold, because they are the primary parameters of interest for these analyses.In addition to the fixed effects listed here, these regressions included random intercepts for individual target characters (n=2). For each parameter, the table includes the estimate (b) and a 95% credible interval for that estimate. Asterisks indicate 95% credible intervals that do not include 0.
BODY
HEART
MIND
Parameter b 95% CI b 95% CI b 95% CI
Intercept (adults) 0.47 [ 0.44, 0.51] * 0.23 [ 0.17, 0.28] * 0.58 [ 0.53, 0.64] *
Animate characters vs. GM (adults) 0.44 [ 0.40, 0.48] * 0.19 [ 0.14, 0.25] * 0.25 [ 0.20, 0.31] *
Older children (7-9y) vs. adults 0.04 [-0.01, 0.09] 0.18 [ 0.11, 0.26] * -0.02 [-0.10, 0.05]
Younger children (4-6y) vs. adults 0.04 [-0.02, 0.09] 0.22 [ 0.14, 0.29] * -0.17 [-0.24, -0.09] *
Interaction: Older children (7-9y) vs. adults -0.11 [-0.16, -0.05] * -0.06 [-0.13, 0.02] -0.16 [-0.23, -0.09] *
Interaction: Younger children (4-6y) vs. adults -0.22 [-0.27, -0.16] * -0.07 [-0.14, 0.01] -0.17 [-0.25, -0.10] *

Neither older nor younger children’s BODY scores were generally higher than adults’ (see Table 5.3, “Older children vs. adults” and “Younger children vs. adults” rows for the BODY domain), but in both groups of children the difference in BODY scores between animate vs. inanimate characters was attenuated, relative to adults (see Table 5.3, “Interaction” row for the BODY domain).

In the HEART domain, both older and younger children’s HEART scores were generally higher than adults’ (see Table 5.3, “Children vs. adults” row for the HEART domain, and Figure 5.4, middle row), but this difference did not vary substantially across target characters (see Table 5.3, “Interaction” row for the BODY domain).

Finally, in the MIND domain, younger children’s (but not older children’s) MIND scores were substantially lower than adults’ (see Table 5.3, “Older children vs. adults” and “Younger children vs. adults” rows for the MIND domain). In addition, in both groups of children the difference in MIND scores between animate vs. inanimate characters was attenuated, relative to adults (see Table 5.3, “Interaction” row for the MIND domain).

Discussion

Study 4: A focus on early childhood (4-5y)

Study 4 builds on Study 3 by providing a targeted investigation of representations of mental life in the preschool years (4-5y). In this chapter, I again focus on what this study can reveal about attributions of BODY, HEART, and MIND at the earliest point in development that I have examined so far, and compare the deployment of this concept among young children vs. adults.

To review, in Study 4, 104 US adults and 43 US children between the ages of 4.02-5.59 years (median: 4.73y) each assessed two target characters on 18 mental capacities, with all aspects of the experimental design tailored to be appropriate for this youngest age group. This study employed the “edge case” variant of the general approach, with participants assessing both a beetle or a robot in sequence (with order counterbalanced across participants). (See Chapter II for detailed methods.)

Special notes on data processing and analysis

As in Studies 2 and 3, to facilitate comparison between children and adults in Study 4, I use adults’ BODY, HEART, and MIND scales (as described in Chapter IV) to analyze both age groups. For analyses using scales derived from EFA of children’s own responses, see [XX Appendix C].

Results

Adults

Children (4-5y)

Developmental comparison

Children vs. adults

Table 5.5: Regression analyses of age-related differences in BODY, HEART, and MIND scores among the 4- to 5-year-old children in Study 4 (scored using adults' scales, as presented in Chapter IV). For each conceptual unit, the table presents a Bayesian regression with 4 fixed effect parameters: (1) the intercept, which is an index of attributions of that conceptual unit among adults; (2) the overall difference in scores for the beetle compared to the grand mean ('GM') among adults; (3) the difference between children's and adults' scores, collapsing across target characters; and (4) the interactive effect of age group and target character. Age effects are highlighted in bold, because they are the primary parameters of interest for these analyses. For each parameter, the table includes the estimate (b) and a 95% credible interval for that estimate. Asterisks indicate 95% credible intervals that do not include 0.
BODY
HEART
MIND
Parameter b 95% CI b 95% CI b 95% CI
Intercept (adults) 0.41 [ 0.38, 0.44] * 0.14 [ 0.10, 0.17] * 0.61 [ 0.57, 0.65] *
Beetle vs. GM (adults) 0.36 [ 0.33, 0.39] * 0.09 [ 0.05, 0.12] * -0.01 [-0.05, 0.03]
Children vs. adults 0.13 [ 0.08, 0.19] * 0.31 [ 0.24, 0.38] * -0.06 [-0.14, 0.01]
Interaction -0.18 [-0.23, -0.12] * -0.07 [-0.14, 0.00] * 0.01 [-0.06, 0.08]

The age comparison between 4- to 5-year-old children and adults in Study 4 yielded remarkably similar results to the parallel comparison between 7- to 9-year-old children and adults in Study 2.

As in Study 2, children’s BODY scores were generally higher than adults’ (see Table 5.5, “Children vs. adults” row for the BODY domain). This appears to have been particularly true for the robot (see Figure 5.6, top row); as a result, the difference between the beetle and the robot was attenuated among children, relative to adults (see Table 5.5, “Interaction” row for the BODY domain).

Again, as in Study 2, children’s HEART scores were also higher than adults’ (see Table 5.5, “Children vs. adults” row for the HEART domain, and Figure 5.6, middle row). In Study 4, this difference between children and adults was slightly more pronounced for the robot than the beetle (see Table 5.5, “Interaction” row for the BODY domain).

And yet again, as in Study 2, there were no substantial differences between children and adults in their MIND scores (see Table 5.5 and Figure 5.6, bottom row)

Discussion

General discussion

Chapter conclusion

SCRAPS

Documenting the application or deployment of conceptual representations through XX

[XX CORRECT TO BE NOT ABOUT FACTOR SCORES! change from factor scores to endorsements. Factor scores don’t give a sense of absolutely yes/no.]

Having inferred a conceptual structure for a given group of participants via EFA, I then sought to examine attributions of mental capacities to the particular target characters included in each study within this conceptual structure: To what extent did participants attribute each of the fundamental components of mental life revealed by EFA to a given target character, and how did this attributions vary with age (either within an age group or between age groups)?

To explore this question, for each study I projected children’s data into adults’ conceptual space and examined “factor scores”—summaries of each participant’s attributions of each of factors revealed by EFA. I used the correlation-preserving “ten Berge” method (as implemented in the “psych” package; Revelle, 2018), imputing missing values using the mean (by target character, capacity, and age group). This yielded one factor score for each of (adults’) factors, for each participant. I consider these to be summaries of that person’s attributions of the corresponding latent construct.

I analyzed these factor scores via mixed effects Bayesian regression analyses using the “brms” package for R (Bürkner, 2017). In all of these analyses, I included the maximal random effect structures given the design for the relevant study. Further details varied by study, depending on the number of target characters included in that study, the number of factors revealed by EFA for the relevant group(s) of participants, and the goals of the analysis (e.g., comparing two age groups vs. examining continuous effects of age within one or more groups of participants).

LS0tCnRpdGxlOiAiQ2hhcHRlciBWOiBDaGFuZ2VzIGluIGRlcGxveW1lbnQgb2YgdGhlIGNvbmNlcHQiCm91dHB1dDoKICBodG1sX25vdGVib29rOgogICAgdG9jOiB5ZXMKICAgIHRvY19kZXB0aDogNAogICAgdG9jX2Zsb2F0OiB5ZXMKYWx3YXlzX2FsbG93X2h0bWw6IHllcwotLS0KCmBgYHtyIGdsb2JhbF9vcHRpb25zLCBpbmNsdWRlID0gRn0Ka25pdHI6Om9wdHNfY2h1bmskc2V0KGZpZy53aWR0aCA9IDMsIGZpZy5hc3AgPSAwLjY3LAogICAgICAgICAgICAgICAgICAgICAgaW5jbHVkZSA9IEYsIGVjaG8gPSBGKQpgYGAKCmBgYHtyfQojICMgZm9yIGtuaXR0aW5nIHRvIC5kb2N4CiMgb3V0cHV0OgojICAgd29yZF9kb2N1bWVudDoKIyAgICAgcmVmZXJlbmNlX2RvY3g6ICIuL3dvcmQtc3R5bGVzLXJlZmVyZW5jZS5kb2N4IgojIGFsd2F5c19hbGxvd19odG1sOiB5ZXMKCiMgIyBmb3Iga25pdHRpbmcgdG8gLm5iLmh0bWwgCiMgb3V0cHV0OgojICAgaHRtbF9ub3RlYm9vazoKIyAgICAgdG9jOiB5ZXMKIyAgICAgdG9jX2RlcHRoOiA0CiMgICAgIHRvY19mbG9hdDogeWVzCmBgYAoKYGBge3J9CiMgcnVuIHVyLXNldHVwIHNjcmlwdCAod2hpY2ggcnVucyBvdGhlciBzY3JpcHRzKQpzb3VyY2UoIi4vc2NyaXB0cy9fU0VUVVAuUiIpCgojIGxvYWQgaW4gRUZBcyAmIG5hbWVzIGZyb20gQ2hhcHRlcnMgSUlJICYgSVYKc291cmNlKCIuL3NjcmlwdHMvc3RvcmVkX2NoMDMuUiIpCnNvdXJjZSgiLi9zY3JpcHRzL3N0b3JlZF9jaDA0LlIiKQpgYGAKCgojIENoYXB0ZXIgb3ZlcnZpZXcKCkluIHRoaXMgY2hhcHRlciwgSSBmb2N1cyBvbiB0aGUgdGhpcmQgb2YgbXkgdGhyZWUga2V5IHF1ZXN0aW9ucyBhYm91dCB0aGUgZGV2ZWxvcG1lbnQgb2YgcmVwcmVzZW50YXRpb25zIG9mIG1lbnRhbCBsaWZlOiBfSG93wqBkbyBwZW9wbGUgb2YgZGlmZmVyZW50IGFnZXMgZGVwbG95IHRoZWlyIGNvbmNlcHR1YWwgcmVwcmVzZW50YXRpb25zIG9mIG1lbnRhbCBsaWZlIHRvIHJlYXNvbiBhYm91dCBzcGVjaWZpYyBlbnRpdGllcyBpbiB0aGUgd29ybGQ/XyBBcyBpbiBDaGFwdGVycyBJSUktSVYsIHRvIGFkZHJlc3MgdGhpcyBxdWVzdGlvbiBJIGRyYXcgb24gZGF0YSBmcm9tIGFsbCBvZiB0aGUgY3VycmVudCBzdHVkaWVzIChTdHVkaWVzIDEtNCk7IGZvciBkZXRhaWxzIGFib3V0IHRoZSBtZXRob2RzIG9mIHRoZXNlIHN0dWRpZXMsIHNlZSBDaGFwdGVyIElJLiBUaGUgZ29hbCBvZiB0aGlzIGNoYXB0ZXIgaXMgdG8gcHJvdmlkZSAic25hcHNob3RzIiBvZiBtZW50YWwgY2FwYWNpdHkgYXR0cmlidXRpb25zIHRvIHZhcmlvdXMgdGFyZ2V0IGNoYXJhY3RlcnMgaW4gZWFybHkgY2hpbGRob29kLCBtaWRkbGUgY2hpbGRob29kLCBhbmQgYWR1bHRob29kLCBhbmQgdG8gZXhwbG9yZSBpbiBmaW5lci1ncmFpbmVkIGRldGFpbCBtb3JlIGNvbnRpbnVvdXMgY2hhbmdlcyBpbiBjaGlsZHJlbidzIGJlbGllZnMgYWJvdXQgdGhlIG1lbnRhbCBsaXZlcyBvZiB0aGVzZSBjaGFyYWN0ZXJzIGJldHdlZW4gNC05eSBvZiBhZ2UsIHdpdGggcGFydGljdWxhciBhdHRlbnRpb24gdG8gY2hpbGRyZW4ncyBhc3Nlc3NtZW50IG9mIGFuaW1hdGUgdnMuIGluYW5pbWF0ZSBiZWluZ3MuCgoKIyBHZW5lcmFsIGFuYWx5c2lzIHBsYW4KCiMjIEhpZ2gtbGV2ZWwgb3ZlcnZpZXcKCkluIGFuYWx5emluZyB0aGVzZSBkYXRhc2V0cyB3aXRoIGFuIGV5ZSB0b3dhcmQgZG9jdW1lbnRpbmcgdGhlIGFwcGxpY2F0aW9uIG9yIGRlcGxveW1lbnQgb2YgdGhlIGNvbmNlcHR1YWwgcmVwcmVzZW50YXRpb25zIGRlc2NyaWJlZCBpbiBDaGFwdGVycyBJSUktSVYsIHRoZSBiYXNpYyBpbnNpZ2h0IGlzIHRoYXQgdGhlIGF0dHJpYnV0aW9uIG9mIHNwZWNpZmljIG1lbnRhbCBjYXBhY2l0aWVzIHRvIHNwZWNpZmljIHRhcmdldCBjaGFyYWN0ZXJzIHByb3ZpZGVzIGV2aWRlbmNlIG9mIGhvdyBjb25jZXB0dWFsIHJlcHJlc2VudGF0aW9ucyBvZiBtZW50YWwgbGlmZSBhcmUgZGVwbG95ZWQgaW4gZXZlcnlkYXkgc29jaWFsIGNvZ25pdGlvbi4gSW4gQ2hhcHRlciBJSSwgSSBpbGx1c3RyYXRlZCB0aGlzIHdpdGggdGhlIGZvbGxvd2luZyBleGFtcGxlOiBJZiBwYXJ0aWNpcGFudHMgd2hvIGFzc2VzcyB0aGUgbWVudGFsIGNhcGFjaXRpZXMgb2YgQ2hhcmFjdGVycyAxLCAyLCBhbmQgMyBzaGFyZSBvbmUgZ2VuZXJhbCBwYXR0ZXJuIG9mIG1lbnRhbCBjYXBhY2l0eSBhdHRyaWJ1dGlvbnMsIGFuZCBwYXJ0aWNpcGFudHMgd2hvIGFzc2VzcyB0aGUgbWVudGFsIGNhcGFjaXRpZXMgb2YgQ2hhcmFjdGVycyA0LCA1LCBhbmQgNiBzaGFyZSBhbm90aGVyIHBhdHRlcm4sIHRoaXMgcHJvdmlkZXMgc29tZSBldmlkZW5jZSB0aGF0IGNvbmNlcHR1YWwgcmVwcmVzZW50YXRpb25zIG9mIG1lbnRhbCBsaWZlIG1pZ2h0IHBsYXkgYSByb2xlIGluIHN0cnVjdHVyaW5nIHJlcHJlc2VudGF0aW9ucyBvZiAoYW5kIGludGVyYWN0aW9ucyB3aXRoKSBkaWZmZXJlbnQgY2xhc3NlcyBvZiBiZWluZ3MgaW4gdGhlIHdvcmxkLiBIZXJlIEkgd2lsbCB0cmFuc2xhdGUgdGhpcyBnZW5lcmFsIGludHVpdGlvbiBpbnRvIGEgc3BlY2lmaWMgYW5hbHlzaXMgcGxhbiB0byBiZSBhcHBsaWVkIHRvIGVhY2ggb2YgdGhlc2UgZGF0YXNldHMgaW4gdHVybi4gCgojIyBEZXRhaWxzIG9mIGFuYWx5c2VzCgpgYGB7cn0KYW5pbV9sb29rdXAgPC0gZGF0YS5mcmFtZShjaGFyYWN0ZXIgPSBsZXZlbHMoc2NvcmVzX2FsbCRjaGFyYWN0ZXIpKSAlPiUKICBtdXRhdGUoYW5pbV9pbmFuID0gY2FzZV93aGVuKAogICAgY2hhcmFjdGVyICVpbiUgYygiYWR1bHQiLCAiY2hpbGQiLCAiaW5mYW50IiwgCiAgICAgICAgICAgICAgICAgICAgICJwZXJzb24gaW4gYSBwZXJzaXN0ZW50IHZlZ2V0YXRpdmUgc3RhdGUiLCAKICAgICAgICAgICAgICAgICAgICAgInBlcnNvbiBpbiBhIFBWUyIsICJmZXR1cyIsICJjaGltcGFuemVlIiwgCiAgICAgICAgICAgICAgICAgICAgICJlbGVwaGFudCIsICJkb2xwaGluIiwgImJlYXIiLCAiZG9nIiwgImdvYXQiLCAKICAgICAgICAgICAgICAgICAgICAgIm1vdXNlIiwgImZyb2ciLCAiYmx1ZSBqYXkiLCAiYmlyZCIsICJmaXNoIiwgCiAgICAgICAgICAgICAgICAgICAgICJiZWV0bGUiLCAibWljcm9iZSIpIH4gImFuaW1hdGUiLAogICAgY2hhcmFjdGVyICVpbiUgYygicm9ib3QiLCAiY29tcHV0ZXIiLCAiY2FyIiwgInRlZGR5IGJlYXIiLCAKICAgICAgICAgICAgICAgICAgICAgImRvbGwiLCAic3RhcGxlciIpIH4gImluYW5pbWF0ZSIsCiAgICBUUlVFIH4gTkFfY2hhcmFjdGVyXyksCiAgICBhbmltX2luYW4gPSBmYWN0b3IoYW5pbV9pbmFuLCBsZXZlbHMgPSBjKCJhbmltYXRlIiwgImluYW5pbWF0ZSIpKSkKYGBgCgpYWAoKIyBTdHVkeSAxOiBBbiBhZHVsdCBlbmRwb2ludAoKSW4gdGhlIGNvbnRleHQgb2YgdGhpcyBkaXNzZXJ0YXRpb24sIFN0dWR5IDEgc2VydmVzIHRvIGRlc2NyaWJlIGEgZGV2ZWxvcG1lbnRhbCBlbmRwb2ludCBmb3IgY29uY2VwdHVhbCByZXByZXNlbnRhdGlvbnMgb2YgbWVudGFsIGxpZmUuIEluIHRoaXMgY2hhcHRlciwgSSBmb2N1cyBvbiB3aGF0IHRoaXMgc3R1ZHkgY2FuIHJldmVhbCBhYm91dCBob3cgVVMgYWR1bHRzIHVzZSB0aGlzIGNvbmNlcHQgdG8gdW5kZXJzdGFuZCB0aGUgYmVpbmdzIGluIHRoZWlyIHdvcmxkOiBXaGljaCBhc3BlY3RzIG9mIG1lbnRhbCBsaWZlIGRvIHRoZXkgZXh0ZW5kIHRvIHdoaWNoIGtpbmRzIG9mIHRhcmdldCBjaGFyYWN0ZXJzPyBUaGlzIHRvcGljIHdhcyBjb3ZlcmVkIG9ubHkgdmVyeSBicmllZmx5IGluIHRoZSBvcmlnaW5hbCBwdWJsaWNhdGlvbiBvZiB0aGlzIHdvcmsgKFdlaXNtYW4gZXQgYWwuLCAyMDE3KS4gCgpUbyByZXZpZXcsIFN0dWRpZXMgMWEtMWMgZW1wbG95ZWQgdGhlICJlZGdlIGNhc2UiIHZhcmlhbnQgb2YgdGhlIGdlbmVyYWwgYXBwcm9hY2gsIHdpdGggcGFydGljaXBhbnRzIGFzc2Vzc2luZyB0aGUgbWVudGFsIGNhcGFjaXRpZXMgb2YgYSBiZWV0bGUsIGEgcm9ib3QsIG9yIGJvdGguIFN0dWRpZXMgMWEgYW5kIDFiIHdlcmUgaWRlbnRpY2FsOiBVUyBhZHVsdHMgKFN0dWR5IDFhOiBfbl89YHIgbnJvdyhkMWFfYWRfd2lkZSlgOyBTdHVkeSAxYjogX25fPWByIG5yb3coZDFiX2FkX3dpZGUpYCkgZWFjaCBhc3Nlc3NlZCBhIHNpbmdsZSB0YXJnZXQgY2hhcmFjdGVyIG9uIDQwIG1lbnRhbCBjYXBhY2l0aWVzLiBTdHVkeSAxYyBlbXBsb3llZCB2ZXJ5IHNpbWlsYXIgbWV0aG9kcywgd2l0aCB0aGUgZXhjZXB0aW9uIHRoYXQgcGFydGljaXBhbnRzIChfbl89YHIgbnJvdyhkMWNfYWRfd2lkZSkvMmApIGVhY2ggYXNzZXNzZWQgX2JvdGhfIHRhcmdldCBjaGFyYWN0ZXJzIHNpZGUgYnkgc2lkZSAod2l0aCBsZWZ0LXJpZ2h0IHBvc2l0aW9uIGNvdW50ZXJiYWxhbmNlZCBhY3Jvc3MgcGFydGljaXBhbnRzKS4gQmVjYXVzZSB0aGVzZSBzdHVkaWVzIHdlcmUgc28gc2ltaWxhciwgaW4gdGhpcyBjaGFwdGVyLCBJIHdpbGwgZGlzY3VzcyB0aGVtIGluIHRhbmRlbS4KClN0dWR5IDFkIGVtcGxveWVkIHRoZSAiZGl2ZXJzZSBjaGFyYWN0ZXJzIiB2YXJpYW50IG9mIHRoZSBnZW5lcmFsIGFwcHJvYWNoLCBpbiB3aGljaCBgciBucm93KGQxZF9hZF93aWRlKWAgVVMgYWR1bHRzIHdlcmUgcmFuZG9tbHkgYXNzaWduZWQgdG8gYXNzZXNzIHRoZSBzYW1lIHNldCBvZiA0MCBtZW50YWwgY2FwYWNpdGllcyB1c2VkIGluIFN0dWRpZXMgMWEtMWQgZm9yIG9uZSBvZiB0aGUgZm9sbG93aW5nIDIxIHRhcmdldCBjaGFyYWN0ZXJzOiBhbiBhZHVsdCwgYSBjaGlsZCwgYW4gaW5mYW50LCBhIHBlcnNvbiBpbiBhIHBlcnNpc3RlbnQgdmVnZXRhdGl2ZSBzdGF0ZSwgYSBmZXR1cywgYSBjaGltcGFuemVlLCBhbiBlbGVwaGFudCwgYSBkb2xwaGluLCBhIGJlYXIsIGEgZG9nLCBhIGdvYXQsIGEgbW91c2UsIGEgZnJvZywgYSBibHVlIGpheSwgYSBmaXNoLCBhIGJlZXRsZSwgYSBtaWNyb2JlLCBhIHJvYm90LCBhIGNvbXB1dGVyLCBhIGNhciwgb3IgYSBzdGFwbGVyLiAoU2VlIENoYXB0ZXIgSUkgYW5kIFdlaXNtYW4gZXQgYWwuLCAyMDE3LCBmb3IgZGV0YWlsZWQgbWV0aG9kcy4pCgojIyBSZXN1bHRzCgojIyMgU3R1ZGllcyAxYS0xYwoKYGBge3J9CnBsb3RzX2QxYSA8LSBjaGFyYWN0ZXJfbXVsdGlwbG90KGQxYV9hZF9zY29yZWRfYWQsIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwbG90X2xhYmVscyA9IGMoIkExIiwgIkEyIikpCgpwbG90c19kMWFfdGl0bGUgPC0gcGxvdF9ncmlkKAogIGdnZHJhdygpICsgCiAgICBkcmF3X2xhYmVsKCJTdHVkeSAxYTogQWR1bHRzIiwgc2l6ZSA9IDE2LCAKICAgICAgICAgICAgICAgZm9udGZhY2UgPSAnYm9sZCcsIHggPSAwLCBoanVzdCA9IDApLAogIHBsb3RzX2QxYSwKICBuY29sID0gMSwgcmVsX2hlaWdodHMgPSBjKDAuMTIsIDEpKQpgYGAKCmBgYHtyfQpwbG90c19kMWIgPC0gY2hhcmFjdGVyX211bHRpcGxvdChkMWJfYWRfc2NvcmVkX2FkLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGxvdF9sYWJlbHMgPSBjKCJCMSIsICJCMiIpKQoKcGxvdHNfZDFiX3RpdGxlIDwtIHBsb3RfZ3JpZCgKICBnZ2RyYXcoKSArIAogICAgZHJhd19sYWJlbCgiU3R1ZHkgMWI6IEFkdWx0cyIsIHNpemUgPSAxNiwgCiAgICAgICAgICAgICAgIGZvbnRmYWNlID0gJ2JvbGQnLCB4ID0gMCwgaGp1c3QgPSAwKSwKICBwbG90c19kMWIsCiAgbmNvbCA9IDEsIHJlbF9oZWlnaHRzID0gYygwLjEyLCAxKSkKYGBgCgpgYGB7cn0KcGxvdHNfZDFjIDwtIGNoYXJhY3Rlcl9tdWx0aXBsb3QoZDFjX2FkX3Njb3JlZF9hZCwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBsb3RfbGFiZWxzID0gYygiQzEiLCAiQzIiKSkKCnBsb3RzX2QxY190aXRsZSA8LSBwbG90X2dyaWQoCiAgZ2dkcmF3KCkgKyAKICAgIGRyYXdfbGFiZWwoIlN0dWR5IDFjOiBBZHVsdHMiLCBzaXplID0gMTYsIAogICAgICAgICAgICAgICBmb250ZmFjZSA9ICdib2xkJywgeCA9IDAsIGhqdXN0ID0gMCksCiAgcGxvdHNfZDFjLAogIG5jb2wgPSAxLCByZWxfaGVpZ2h0cyA9IGMoMC4xMiwgMSkpCmBgYAoKYGBge3IsIGZpZy53aWR0aCA9IDksIGZpZy5hc3AgPSAwLjR9CiMgaW50ZXJpbSBwbG90IGZvciBlYXNlIG9mIHdyaXRpbmcKcGxvdF9ncmlkKHBsb3RzX2QxYV90aXRsZSwgcGxvdHNfZDFiX3RpdGxlLCBwbG90c19kMWNfdGl0bGUsIG5jb2wgPSAzKQpgYGAKCiMjIyBTdHVkeSAxZAoKYGBge3J9CnBsb3RzX2QxZCA8LSBjaGFyYWN0ZXJfbXVsdGlwbG90KGQxZF9hZF9zY29yZWRfYWQsIHNob3dfYW5pbV9ieV9zdWJqID0gVCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGxvdF9sYWJlbHMgPSBjKCJEMSIsICJEMiIsICJEMyIpKQoKcGxvdHNfZDFkX3RpdGxlIDwtIHBsb3RfZ3JpZCgKICBnZ2RyYXcoKSArIAogICAgZHJhd19sYWJlbCgiU3R1ZHkgMWQ6IEFkdWx0cyIsIHNpemUgPSAxNiwgCiAgICAgICAgICAgICAgIGZvbnRmYWNlID0gJ2JvbGQnLCB4ID0gMCwgaGp1c3QgPSAwKSwKICBwbG90c19kMWQsCiAgbmNvbCA9IDEsIHJlbF9oZWlnaHRzID0gYygwLjEyLCAxKSkKYGBgCgpgYGB7ciwgZmlnLndpZHRoID0gOSwgZmlnLmFzcCA9IDAuNH0KIyBpbnRlcmltIHBsb3QgZm9yIGVhc2Ugb2Ygd3JpdGluZwpwbG90c19kMWRfdGl0bGUKYGBgCgojIyBEaXNjdXNzaW9uCgpgYGB7cn0KZmlndXJlNS4xX3Bsb3RzIDwtIHBsb3RfZ3JpZCgKICBwbG90X2dyaWQocGxvdHNfZDFhX3RpdGxlLCBwbG90c19kMWJfdGl0bGUsIHBsb3RzX2QxY190aXRsZSwgbmNvbCA9IDMpLAogIHBsb3RzX2QxZF90aXRsZSwgbmNvbCA9IDEpCmBgYAoKYGBge3J9CmZpZ3VyZTUuMV9wbG90c19jYXAgPC0gYWRkX3N1YihmaWd1cmU1LjFfcGxvdHMsIHN0cl93cmFwKCJGaWd1cmUgNS4xOiBVUyBhZHVsdHMnIGF0dHJpYnV0aW9ucyBvZiBCT0RZLCBIRUFSVCwgYW5kIE1JTkQgaW4gKEEpIFN0dWR5IDFhLCAoQikgU3R1ZHkgMWIsIChDKSBTdHVkeSAxYywgYW5kIChEKSBTdHVkeSAxZC4gRm9yIGVhY2ggY29uY2VwdHVhbCB1bml0LCBzY29yZXMgY291bGQgcmFuZ2UgZnJvbSAwLTEuIFBsb3RzIGluY2x1ZGUgc2NvcmVzIGJ5IHRhcmdldCBjaGFyYWN0ZXIgKHBhbmVscyBBMSwgQjEsIEMxLCBhbmQgRDEpLCBzY29yZXMgYnkgYW5pbWFjeSBzdGF0dXMgKHdoZW4gbm90IHJlZHVuZGFudCB3aXRoIHRhcmdldCBjaGFyYWN0ZXI6IHBhbmVsIEQyKSwgYW5kIGRpc3RyaWJ1dGlvbnMgb2Ygc2NvcmVzIChwYW5lbHMgQTIsIEIyLCBDMiwgYW5kIEQzKS4gSW5kaXZpZHVhbCBwYXJ0aWNpcGFudHMgYXJlIHBsb3R0ZWQgYXMgc21hbGwsIHRyYW5zbHVjZW50IGNpcmNsZXMsIGFuZCBtZWFuIHNjb3JlcyBieSBjaGFyYWN0ZXIgYXJlIHBsb3R0ZWQgYXMgbGFyZ2VyLCBzb2xpZCBkaWFtb25kcy4gRXJyb3IgYmFycyBhcmUgOTUlIGJvb3RzdHJhcHBlZCBjb25maWRlbmNlIGludGVydmFscy4iLCAyMDUpLCB4ID0gMCwgaGp1c3QgPSAwKQpgYGAKCmBgYHtyLCBpbmNsdWRlID0gVCwgZmlnLndpZHRoID0gOSwgZmlnLmFzcCA9IDAuOH0KZ2dkcmF3KGZpZ3VyZTUuMV9wbG90c19jYXApCmBgYAoKCiMgU3R1ZHkgMjogQ29uY2VwdHVhbCBjaGFuZ2UgYmV0d2VlbiBtaWRkbGUgY2hpbGRob29kICg3LTl5KSBhbmQgYWR1bHRob29kCgpJbiB0aGUgY29udGV4dCBvZiB0aGlzIGRpc3NlcnRhdGlvbiwgU3R1ZHkgMiBzZXJ2ZXMgdG8gcHJvdmlkZSBhbiBpbml0aWFsIGludmVzdGlnYXRpb24gb2YgcmVwcmVzZW50YXRpb25zIG9mIG1lbnRhbCBsaWZlIGVhcmxpZXIgaW4gZGV2ZWxvcG1lbnQsIGluIHdoYXQgSSBoYXZlIGNhbGxlZCBtaWRkbGUgY2hpbGRob29kICg3LTl5KS4gSW4gdGhpcyBjaGFwdGVyLCBJIGZvY3VzIG9uIHdoYXQgdGhpcyBzdHVkeSBjYW4gcmV2ZWFsIGFib3V0IGNoYW5nZXMgaW4gdGhlIGRlcGxveW1lbnQgb2YgdGhpcyBjb25jZXB0IGJldHdlZW4gbWlkZGxlIGNoaWxkaG9vZCBhbmQgYWR1bHRob29kOiBIb3cgZG8gVVMgNy0gdG8gOS15ZWFyLW9sZCBjaGlsZHJlbidzIGF0dHJpYnV0aW9ucyBvZiBCT0RZLCBIRUFSVCwgYW5kIE1JTkQgY29tcGFyZSB0byB0aG9zZSBvZiBhZHVsdHMgaW4gdGhlaXIgY3VsdHVyYWwgY29udGV4dD8KClRvIHJldmlldywgaW4gU3R1ZHkgMiwgYHIgbnJvdyhkMl9hZF93aWRlKWAgVVMgYWR1bHRzIGFuZCBgciBucm93KGQyXzc5X3dpZGUpYCBVUyBjaGlsZHJlbiBiZXR3ZWVuIHRoZSBhZ2VzIG9mIGByIHN1bW1hcnkoZDJfNzkkYWdlKVsiTWluLiJdICU+JSByb3VuZCgyKSAlPiUgZm9ybWF0KG5zbWFsbCA9IDIpYC1gciBzdW1tYXJ5KGQyXzc5JGFnZSlbIk1heC4iXSAlPiUgcm91bmQoMikgJT4lIGZvcm1hdChuc21hbGwgPSAyKWAgeWVhcnMgKG1lZGlhbjogYHIgc3VtbWFyeShkMl83OSRhZ2UpWyJNZWRpYW4iXSAlPiUgcm91bmQoMikgJT4lIGZvcm1hdChuc21hbGwgPSAyKWB5KSBlYWNoIGFzc2Vzc2VkIGEgc2luZ2xlIHRhcmdldCBjaGFyYWN0ZXIgb24gNDAgbWVudGFsIGNhcGFjaXRpZXMuIFRoaXMgc3R1ZHkgZW1wbG95ZWQgdGhlICJlZGdlIGNhc2UiIHZhcmlhbnQgb2YgdGhlIGdlbmVyYWwgYXBwcm9hY2gsIHdpdGggcGFydGljaXBhbnRzIHJhbmRvbWx5IGFzc2lnbmVkIHRvIGFzc2VzcyBlaXRoZXIgYSBiZWV0bGUgb3IgYSByb2JvdC4gKFNlZSBDaGFwdGVyIElJIGZvciBkZXRhaWxlZCBtZXRob2RzLikKCiMjIFNwZWNpYWwgbm90ZXMgb24gZGF0YSBwcm9jZXNzaW5nIGFuZCBhbmFseXNpcwoKVG8gZmFjaWxpdGF0ZSBjb21wYXJpc29uIGJldHdlZW4gY2hpbGRyZW4gYW5kIGFkdWx0cyBpbiBTdHVkeSAyLCBJIHVzZSBhZHVsdHMnIF9CT0RZXywgX0hFQVJUXywgYW5kIF9NSU5EXyBzY2FsZXMgKGFzIGRlc2NyaWJlZCBpbiBDaGFwdGVyIElWKSB0byBhbmFseXplIGJvdGggYWdlIGdyb3Vwcy4gRm9yIGFuYWx5c2VzIHVzaW5nIHNjYWxlcyBkZXJpdmVkIGZyb20gRUZBIG9mIGNoaWxkcmVuJ3Mgb3duIHJlc3BvbnNlcywgc2VlIFtYWCBBcHBlbmRpeCBDXS4KCiMjIFJlc3VsdHMKCiMjIyBBZHVsdHMKCmBgYHtyfQpwbG90c19kMl9hZCA8LSBjaGFyYWN0ZXJfbXVsdGlwbG90KGQyX2FkX3Njb3JlZF9hZCwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGxvdF9sYWJlbHMgPSBjKCJBMSIsICJBMiIpKQoKcGxvdHNfZDJfYWRfdGl0bGUgPC0gcGxvdF9ncmlkKAogIGdnZHJhdygpICsgCiAgICBkcmF3X2xhYmVsKCJTdHVkeSAyOiBBZHVsdHMiLCBzaXplID0gMTYsIAogICAgICAgICAgICAgICBmb250ZmFjZSA9ICdib2xkJywgeCA9IDAsIGhqdXN0ID0gMCksCiAgcGxvdHNfZDJfYWQsCiAgbmNvbCA9IDEsIHJlbF9oZWlnaHRzID0gYygwLjEyLCAxKSkKYGBgCgpgYGB7ciwgZmlnLndpZHRoID0gNCwgZmlnLmFzcCA9IDF9CiMgaW50ZXJpbSBwbG90IGZvciBlYXNlIG9mIHdyaXRpbmcKcGxvdHNfZDJfYWRfdGl0bGUKYGBgCgojIyMgQ2hpbGRyZW4gKDctOXkpCgpgYGB7cn0KcGxvdHNfZDJfNzkgPC0gY2hhcmFjdGVyX211bHRpcGxvdChkMl83OV9zY29yZWRfYWQsIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBsb3RfbGFiZWxzID0gYygiQjEiLCAiQjIiKSkKCnBsb3RzX2QyXzc5X3RpdGxlIDwtIHBsb3RfZ3JpZCgKICBnZ2RyYXcoKSArIAogICAgZHJhd19sYWJlbCgiU3R1ZHkgMjogQ2hpbGRyZW4sIDctOXkiLCBzaXplID0gMTYsIAogICAgICAgICAgICAgICBmb250ZmFjZSA9ICdib2xkJywgeCA9IDAsIGhqdXN0ID0gMCksCiAgcGxvdHNfZDJfNzksCiAgbmNvbCA9IDEsIHJlbF9oZWlnaHRzID0gYygwLjEyLCAxKSkKYGBgCgpgYGB7ciwgZmlnLndpZHRoID0gNCwgZmlnLmFzcCA9IDF9CiMgaW50ZXJpbSBwbG90IGZvciBlYXNlIG9mIHdyaXRpbmcKcGxvdHNfZDJfNzlfdGl0bGUKYGBgCgpgYGB7cn0KZmlndXJlNS4yX3Bsb3RzIDwtIHBsb3RfZ3JpZChwbG90c19kMl9hZF90aXRsZSwgcGxvdHNfZDJfNzlfdGl0bGUsIG5jb2wgPSAyKQpgYGAKCmBgYHtyfQpmaWd1cmU1LjJfcGxvdHNfY2FwIDwtIGFkZF9zdWIoZmlndXJlNS4yX3Bsb3RzLCBzdHJfd3JhcCgiRmlndXJlIDUuMjogQXR0cmlidXRpb25zIG9mIEJPRFksIEhFQVJULCBhbmQgTUlORCBhbW9uZyAoQSkgYWR1bHRzIGFuZCAoQikgNy0gdG8gOS15ZWFyLW9sZCBjaGlsZHJlbiBpbiBTdHVkeSAyLiBGb3IgZWFjaCBjb25jZXB0dWFsIHVuaXQsIHNjb3JlcyBjb3VsZCByYW5nZSBmcm9tIDAtMS4gUGxvdHMgaW5jbHVkZSBzY29yZXMgYnkgdGFyZ2V0IGNoYXJhY3RlciAocGFuZWxzIEExIGFuZCBCMSkgYW5kIGRpc3RyaWJ1dGlvbnMgb2Ygc2NvcmVzIChwYW5lbHMgQTIgYW5kIEIyKS4gSW5kaXZpZHVhbCBwYXJ0aWNpcGFudHMgYXJlIHBsb3R0ZWQgYXMgc21hbGwsIHRyYW5zbHVjZW50IGNpcmNsZXMsIGFuZCBtZWFuIHNjb3JlcyBieSBjaGFyYWN0ZXIgYXJlIHBsb3R0ZWQgYXMgbGFyZ2VyLCBzb2xpZCBkaWFtb25kcy4gRXJyb3IgYmFycyBhcmUgOTUlIGJvb3RzdHJhcHBlZCBjb25maWRlbmNlIGludGVydmFscy4iLCAxMzUpLCB4ID0gMCwgaGp1c3QgPSAwKQpgYGAKCmBgYHtyLCBpbmNsdWRlID0gVCwgZmlnLndpZHRoID0gNiwgZmlnLmFzcCA9IDAuNn0KZ2dkcmF3KGZpZ3VyZTUuMl9wbG90c19jYXApCmBgYAoKIyMjIERldmVsb3BtZW50YWwgY29tcGFyaXNvbgoKIyMjIyBDaGlsZHJlbiB2cy4gYWR1bHRzCgpgYGB7cn0KZDJfNzlhZF9zY29yZWRfYWQgPC0gZnVsbF9qb2luKGQyX2FkX3Njb3JlZF9hZCwgZDJfNzlfc2NvcmVkX2FkKSAlPiUKICBsZWZ0X2pvaW4oYW5pbV9sb29rdXApICU+JQogIG11dGF0ZShjaGFyYWN0ZXIgPSBmYWN0b3IoY2hhcmFjdGVyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV2ZWxzID0gbGV2ZWxzKGQyX2FkX3Njb3JlZF9hZCRjaGFyYWN0ZXIpKSwKICAgICAgICAgYWdlX2dyb3VwID0gZmFjdG9yKGFnZV9ncm91cCkpCgpjb250cmFzdHMoZDJfNzlhZF9zY29yZWRfYWQkY2hhcmFjdGVyKSA8LSBjb250cmFzdHNfc3VtX2VkZ2UKY29udHJhc3RzKGQyXzc5YWRfc2NvcmVkX2FkJGZhY3RvcikgPC0gY29udHJhc3RzX2NudDNfZmFjdG9yCmNvbnRyYXN0cyhkMl83OWFkX3Njb3JlZF9hZCRhbmltX2luYW4pIDwtIGNvbnRyYXN0c19zdW0yX2FuaW0KY29udHJhc3RzKGQyXzc5YWRfc2NvcmVkX2FkJGFnZV9ncm91cCkgPC0gY29udHJhc3RzX2R1bTJfYWdlZ3AKYGBgCgpgYGB7cn0KIyByX2QyX2RldmdwX0JPRFkgPC0gYnJtKHNjb3JlIH4gYW5pbV9pbmFuICogYWdlX2dyb3VwLAojICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YSA9IGQyXzc5YWRfc2NvcmVkX2FkICU+JQojICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWx0ZXIoZmFjdG9yID09ICJCT0RZIiksCiMgICAgICAgICAgICAgICAgICAgICAgICAgICBjb3JlcyA9IDQsIGNvbnRyb2wgPSBsaXN0KGFkYXB0X2RlbHRhID0gMC45OSkpCiMgCiMgc2F2ZVJEUyhyX2QyX2RldmdwX0JPRFksICIuL3N0b3JlZC9icm1zX21vZGVscy9yX2QyX2RldmdwX0JPRFkiKQoKcl9kMl9kZXZncF9CT0RZIDwtIHJlYWRSRFMoIi4vc3RvcmVkL2JybXNfbW9kZWxzL3JfZDJfZGV2Z3BfQk9EWSIpCgpzdW1tYXJ5KHJfZDJfZGV2Z3BfQk9EWSkKYGBgCgpgYGB7cn0KIyByX2QyX2RldmdwX0hFQVJUIDwtIGJybShzY29yZSB+IGFuaW1faW5hbiAqIGFnZV9ncm91cCwKIyAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEgPSBkMl83OWFkX3Njb3JlZF9hZCAlPiUKIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsdGVyKGZhY3RvciA9PSAiSEVBUlQiKSwKIyAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvcmVzID0gNCwgY29udHJvbCA9IGxpc3QoYWRhcHRfZGVsdGEgPSAwLjk5KSkKIyAKIyBzYXZlUkRTKHJfZDJfZGV2Z3BfSEVBUlQsICIuL3N0b3JlZC9icm1zX21vZGVscy9yX2QyX2RldmdwX0hFQVJUIikKCnJfZDJfZGV2Z3BfSEVBUlQgPC0gcmVhZFJEUygiLi9zdG9yZWQvYnJtc19tb2RlbHMvcl9kMl9kZXZncF9IRUFSVCIpCgpzdW1tYXJ5KHJfZDJfZGV2Z3BfSEVBUlQpCmBgYAoKYGBge3J9CiMgcl9kMl9kZXZncF9NSU5EIDwtIGJybShzY29yZSB+IGFuaW1faW5hbiAqIGFnZV9ncm91cCwKIyAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEgPSBkMl83OWFkX3Njb3JlZF9hZCAlPiUKIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsdGVyKGZhY3RvciA9PSAiTUlORCIpLAojICAgICAgICAgICAgICAgICAgICAgICAgICAgY29yZXMgPSA0LCBjb250cm9sID0gbGlzdChhZGFwdF9kZWx0YSA9IDAuOTkpKQojIAojIHNhdmVSRFMocl9kMl9kZXZncF9NSU5ELCAiLi9zdG9yZWQvYnJtc19tb2RlbHMvcl9kMl9kZXZncF9NSU5EIikKCnJfZDJfZGV2Z3BfTUlORCA8LSByZWFkUkRTKCIuL3N0b3JlZC9icm1zX21vZGVscy9yX2QyX2RldmdwX01JTkQiKQoKc3VtbWFyeShyX2QyX2RldmdwX01JTkQpCmBgYAoKYGBge3J9CnJlZ3RhYl9kMl9kZXZncCA8LSByZWd0YWJfZGV2Z3BfZnVuKAogIHJlZ19ib2R5ID0gcl9kMl9kZXZncF9CT0RZLCAKICByZWdfaGVhcnQgPSByX2QyX2RldmdwX0hFQVJULAogIHJlZ19taW5kID0gcl9kMl9kZXZncF9NSU5ELAogIGFnZV9sZXZlbHMgPSBjKCJhZ2VfZ3JvdXBfY2hpbGQiKSwgCiAgYWdlX2xhYmVscyA9IGMoIkNoaWxkcmVuIHZzLiBhZHVsdHMiKSkKYGBgCgpgYGB7cn0KdGFibGU1LjEgPC0gZGV2Z3BfdGFibGVfZnVuKHJlZ3RhYl9kZXZncCA9IHJlZ3RhYl9kMl9kZXZncCwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBuX2NoYXJhY3RlcnMgPSAyLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRhYmxlX25hbWUgPSAiVGFibGUgNS4xIiwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHVkeV9uYW1lID0gIlN0dWR5IDIiLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFnZV9ncm91cCA9ICI3LSB0byA5LXllYXItb2xkIGNoaWxkcmVuIiwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBuX2FnZV9ncm91cHMgPSAxLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhcl9jb21wYXJlX2xhYmVsID0gIkJlZXRsZSB2cy4gR00iKQpgYGAKCmBgYHtyLCBpbmNsdWRlID0gVH0KdGFibGU1LjEKYGBgCgpDaGlsZHJlbidzIF9CT0RZXyBzY29yZXMgd2VyZSBnZW5lcmFsbHkgaGlnaGVyIHRoYW4gYWR1bHRzJyAoc2VlIFRhYmxlIDUuMSwgIkNoaWxkcmVuIHZzLiBhZHVsdHMiIHJvdyBmb3IgdGhlIEJPRFkgZG9tYWluKS4gVGhpcyBhcHBlYXJzIHRvIGhhdmUgYmVlbiBwYXJ0aWN1bGFybHkgdHJ1ZSBmb3IgdGhlIHJvYm90IChzZWUgRmlndXJlIDUuMiwgdG9wIHJvdyk7IGFzIGEgcmVzdWx0LCB0aGUgZGlmZmVyZW5jZSBiZXR3ZWVuIHRoZSBiZWV0bGUgYW5kIHRoZSByb2JvdCB3YXMgYXR0ZW51YXRlZCBhbW9uZyBjaGlsZHJlbiwgcmVsYXRpdmUgdG8gYWR1bHRzIChzZWUgVGFibGUgNS4xLCAiSW50ZXJhY3Rpb24iIHJvdyBmb3IgdGhlIEJPRFkgZG9tYWluKS4KCkNoaWxkcmVuJ3MgX0hFQVJUXyBzY29yZXMgd2VyZSBhbHNvIGhpZ2hlciB0aGFuIGFkdWx0cycgKHNlZSBUYWJsZSA1LjEsICJDaGlsZHJlbiB2cy4gYWR1bHRzIiByb3cgZm9yIHRoZSBIRUFSVCBkb21haW4sIGFuZCBGaWd1cmUgNS4yLCBtaWRkbGUgcm93KSwgYnV0IHRoaXMgZGlmZmVyZW5jZSBkaWQgbm90IHZhcnkgc3Vic3RhbnRpYWxseSBhY3Jvc3MgdGFyZ2V0IGNoYXJhY3RlcnMgKHNlZSBUYWJsZSA1LjEsICJJbnRlcmFjdGlvbiIgcm93IGZvciB0aGUgQk9EWSBkb21haW4pLgoKVGhlcmUgd2VyZSBubyBzdWJzdGFudGlhbCBkaWZmZXJlbmNlcyBiZXR3ZWVuIGNoaWxkcmVuIGFuZCBhZHVsdHMgaW4gdGhlaXIgX01JTkRfIHNjb3JlcyAoc2VlIFRhYmxlIDUuMSBhbmQgRmlndXJlIDUuMiwgYm90dG9tIHJvdykKCiMjIyMgQWdlLXJlbGF0ZWQgZGlmZmVyZW5jZXMgYmV0d2VlbiA3LTl5CgpgYGB7cn0KZDJfNzlhZ2Vfc2NvcmVkX2FkIDwtIGQyXzc5X3Njb3JlZF9hZCAlPiUKICBsZWZ0X2pvaW4oZDJfNzkgJT4lIGRpc3RpbmN0KHN1YmlkLCBhZ2UpKSAlPiUKICBsZWZ0X2pvaW4oYW5pbV9sb29rdXApICU+JQogIGZpbHRlcighaXMubmEoYWdlKSkgJT4lCiAgbXV0YXRlKGNoYXJhY3RlciA9IGZhY3RvcihjaGFyYWN0ZXIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXZlbHMgPSBsZXZlbHMoZDJfYWRfc2NvcmVkX2FkJGNoYXJhY3RlcikpLAogICAgICAgICBhZ2VfY2VudGVyZWQgPSBzY2FsZShhZ2UsIHNjYWxlID0gRikpCgpjb250cmFzdHMoZDJfNzlhZ2Vfc2NvcmVkX2FkJGNoYXJhY3RlcikgPC0gY29udHJhc3RzX3N1bV9lZGdlCmNvbnRyYXN0cyhkMl83OWFnZV9zY29yZWRfYWQkZmFjdG9yKSA8LSBjb250cmFzdHNfY250M19mYWN0b3IKY29udHJhc3RzKGQyXzc5YWdlX3Njb3JlZF9hZCRhbmltX2luYW4pIDwtIGNvbnRyYXN0c19zdW0yX2FuaW0KYGBgCgpgYGB7cn0KIyByX2QyX2RldnNjb3JlX0JPRFkgPC0gYnJtKHNjb3JlIH4gYW5pbV9pbmFuICogYWdlX2NlbnRlcmVkLAojICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YSA9IGQyXzc5YWdlX3Njb3JlZF9hZCAlPiUKIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsdGVyKGZhY3RvciA9PSAiQk9EWSIpLAojICAgICAgICAgICAgICAgICAgICAgICAgICAgY29yZXMgPSA0LCBjb250cm9sID0gbGlzdChhZGFwdF9kZWx0YSA9IDAuOTkpKQojIAojIHNhdmVSRFMocl9kMl9kZXZzY29yZV9CT0RZLCAiLi9zdG9yZWQvYnJtc19tb2RlbHMvcl9kMl9kZXZzY29yZV9CT0RZIikKCnJfZDJfZGV2c2NvcmVfQk9EWSA8LSByZWFkUkRTKCIuL3N0b3JlZC9icm1zX21vZGVscy9yX2QyX2RldnNjb3JlX0JPRFkiKQoKc3VtbWFyeShyX2QyX2RldnNjb3JlX0JPRFkpCmBgYAoKYGBge3J9CiMgcl9kMl9kZXZzY29yZV9IRUFSVCA8LSBicm0oc2NvcmUgfiBhbmltX2luYW4gKiBhZ2VfY2VudGVyZWQsCiMgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhID0gZDJfNzlhZ2Vfc2NvcmVkX2FkICU+JQojICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWx0ZXIoZmFjdG9yID09ICJIRUFSVCIpLAojICAgICAgICAgICAgICAgICAgICAgICAgICAgY29yZXMgPSA0LCBjb250cm9sID0gbGlzdChhZGFwdF9kZWx0YSA9IDAuOTkpKQojIAojIHNhdmVSRFMocl9kMl9kZXZzY29yZV9IRUFSVCwgIi4vc3RvcmVkL2JybXNfbW9kZWxzL3JfZDJfZGV2c2NvcmVfSEVBUlQiKQoKcl9kMl9kZXZzY29yZV9IRUFSVCA8LSByZWFkUkRTKCIuL3N0b3JlZC9icm1zX21vZGVscy9yX2QyX2RldnNjb3JlX0hFQVJUIikKCnN1bW1hcnkocl9kMl9kZXZzY29yZV9IRUFSVCkKYGBgCgpgYGB7cn0KIyByX2QyX2RldnNjb3JlX01JTkQgPC0gYnJtKHNjb3JlIH4gYW5pbV9pbmFuICogYWdlX2NlbnRlcmVkLAojICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YSA9IGQyXzc5YWdlX3Njb3JlZF9hZCAlPiUKIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsdGVyKGZhY3RvciA9PSAiTUlORCIpLAojICAgICAgICAgICAgICAgICAgICAgICAgICAgY29yZXMgPSA0LCBjb250cm9sID0gbGlzdChhZGFwdF9kZWx0YSA9IDAuOTkpKQojIAojIHNhdmVSRFMocl9kMl9kZXZzY29yZV9NSU5ELCAiLi9zdG9yZWQvYnJtc19tb2RlbHMvcl9kMl9kZXZzY29yZV9NSU5EIikKCnJfZDJfZGV2c2NvcmVfTUlORCA8LSByZWFkUkRTKCIuL3N0b3JlZC9icm1zX21vZGVscy9yX2QyX2RldnNjb3JlX01JTkQiKQoKc3VtbWFyeShyX2QyX2RldnNjb3JlX01JTkQpCmBgYAoKYGBge3J9CnJlZ3RhYl9kMl9kZXZzY29yZSA8LSByZWd0YWJfZGV2c2NvcmVfZnVuKHJlZ19ib2R5ID0gcl9kMl9kZXZzY29yZV9CT0RZLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWdfaGVhcnQgPSByX2QyX2RldnNjb3JlX0hFQVJULAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWdfbWluZCA9IHJfZDJfZGV2c2NvcmVfTUlORCkKYGBgCgpgYGB7cn0KdGFibGU1LjIgPC0gZGV2c2NvcmVfdGFibGVfZnVuKHJlZ3RhYl9kZXZzY29yZSA9IHJlZ3RhYl9kMl9kZXZzY29yZSwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuX2NoYXJhY3RlcnMgPSAyLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRhYmxlX25hbWUgPSAiVGFibGUgNS4yIiwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHVkeV9uYW1lID0gIlN0dWR5IDIiLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFnZV9yYW5nZSA9ICI3LSB0byA5LXllYXItb2xkIGNoaWxkcmVuIiwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZWFuX2FnZSA9IG1lYW4oZDJfNzkkYWdlLCBuYS5ybSA9IFQpLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXJfY29tcGFyZV9sYWJlbCA9ICJCZWV0bGUgdnMuIEdNIikKYGBgCgpgYGB7ciwgaW5jbHVkZSA9IFR9CnRhYmxlNS4yCmBgYAoKSW4gbGluZSB3aXRoIGFuIGFkdWx0LWxpa2UgdW5kZXJzdGFuZGluZyBvZiB0aGUgYW5pbWF0ZS1pbmFuaW1hdGUgZGlzdGluY3Rpb24sIF9CT0RZXyBzY29yZXMgd2VyZSBnZW5lcmFsbHkgaGlnaGVyIGFtb25nIGNoaWxkcmVuIHdobyBhc3Nlc3NlZCB0aGUgYmVldGxlICh0aGUgYW5pbWF0ZSB0YXJnZXQgY2hhcmFjdGVyKSB0aGFuIGFtb25nIGNoaWxkcmVuIHdobyBhc3Nlc3NlZCB0aGUgcm9ib3QgKHRoZSBpbmFuaW1hdGUgdGFyZ2V0IGNoYXJhY3Rlcjsgc2VlIFRhYmxlIDUuMiwgIkJlZXRsZSB2cy4gR00iIHJvdyBmb3IgdGhlIEJPRFkgZG9tYWluKS4gV2l0aCBhZ2UsIGhvd2V2ZXIsIGNoaWxkcmVuJ3MgX0JPRFlfIHNjb3JlcyBnZW5lcmFsbHkgZGVjcmVhc2VkIChhbmQgVGFibGUgNS4yLCAiRXhhY3QgYWdlIiByb3cgZm9yIHRoZSBCT0RZIGRvbWFpbiksIGRyaXZlbiBieSBjaGFuZ2VzIGluIGNoaWxkcmVuJ3MgYXR0cmlidXRpb25zIG9mIEJPRFkgdG8gdGhlIHJvYm90LiBBcyBhIHJlc3VsdCwgdGhlIGRpZmZlcmVuY2UgYmV0d2VlbiB0aGUgYmVldGxlIGFuZCB0aGUgcm9ib3QgaW5jcmVhc2VkIG92ZXIgdGhlIGFnZSByYW5nZSAoc2VlIFRhYmxlIDUuMiwgIkludGVyYWN0aW9uIiByb3cgZm9yIHRoZSBCT0RZIGRvbWFpbiwgYW5kIEZpZ3VyZSA1LjMsIGxlZnRtb3N0IHBsb3QpLgoKQ2hpbGRyZW4ncyBfSEVBUlRfIHNjb3JlcyBkaWQgbm90IGRpZmZlciByZWxpYWJseSBhY3Jvc3MgdGhlIHR3byB0YXJnZXQgY2hhcmFjdGVycyBpbiB0aGlzIHN0dWR5IChzZWUgVGFibGUgNS4yLCAiQmVldGxlIHZzLiBHTSIgcm93IGZvciB0aGUgSEVBUlQgZG9tYWluKS4gV2l0aCBhZ2UsIGNoaWxkcmVuJ3MgX0hFQVJUXyBzY29yZXMgZm9yIGJvdGggY2hhcmFjdGVycyBnZW5lcmFsbHkgZGVjcmVhc2VkIChhbmQgVGFibGUgNS4yLCAiRXhhY3QgYWdlIiBhbmQgIkludGVyYWN0aW9uIiByb3dzIGZvciB0aGUgSEVBUlQgZG9tYWluLCBhbmQgRmlndXJlIDUuMywgY2VudGVyIHBsb3QpLgoKRmluYWxseeKAlGluIGNvbnRyYXN0IHRvIHdoYXQgb25lIG1pZ2h0IGV4cGVjdCBpZiBjaGlsZHJlbiBhdHRyaWJ1dGVkIG1vcmUgbWVudGFsIGxpZmUgYWNyb3NzIHRoZSBib2FyZCB0byBhbmltYXRlIHRoYW4gaW5hbmltYXRlIG9iamVjdHPigJRfTUlORF8gc2NvcmVzIHdlcmUgZ2VuZXJhbGx5IGhpZ2hlciBhbW9uZyBjaGlsZHJlbiB3aG8gYXNzZXNzZWQgdGhlIHJvYm90ICh0aGUgaW5hbmltYXRlIHRhcmdldCBjaGFyYWN0ZXIpIHRoYW4gYW1vbmcgY2hpbGRyZW4gd2hvIGFzc2Vzc2VkIHRoZSBiZWV0bGUgKHRoZSBhbmltYXRlIHRhcmdldCBjaGFyYWN0ZXI7IHNlZSBUYWJsZSA1LjIsICJCZWV0bGUgdnMuIEdNIiByb3cgZm9yIHRoZSBNSU5EIGRvbWFpbikuIE1vcmVvdmVyLCB3aXRoIGFnZSwgY2hpbGRyZW4ncyBfTUlORF8gc2NvcmVzIGZvciBib3RoIGNoYXJhY3RlcnMgZ2VuZXJhbGx5IGluY3JlYXNlZCAoYW5kIFRhYmxlIDUuMiwgIkV4YWN0IGFnZSIgYW5kICJJbnRlcmFjdGlvbiIgcm93cyBmb3IgdGhlIE1JTkQgZG9tYWluLCBhbmQgRmlndXJlIDUuMywgcmlnaHRtb3N0IHBsb3QpLgoKYGBge3J9CnBsb3RzX2QyX2RldiA8LSBjaGFyYWN0ZXJfZGV2cGxvdChkZl9zY29yZWRfYWQgPSBkMl9hZF9zY29yZWRfYWQsIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGZfc2NvcmVkX2NoID0gZDJfNzlfc2NvcmVkX2FkLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRmX2FnZSA9IGQyXzc5KQpgYGAKCmBgYHtyfQpmaWd1cmU1LjMgPC0gcGxvdHNfZDJfZGV2ICsKICBsYWJzKHRpdGxlID0gIlN0dWR5IDI6IENoaWxkcmVuLCA3LTl5IikKYGBgCgpgYGB7cn0KZmlndXJlNS4zX3Bsb3RzX2NhcCA8LSBhZGRfc3ViKGZpZ3VyZTUuMywgc3RyX3dyYXAoIkZpZ3VyZSA1LjM6IENoYW5nZXMgaW4gYXR0cmlidXRpb25zIG9mIEJPRFksIEhFQVJULCBhbmQgTUlORCBhbW9uZyA3LSB0byA5LXllYXItb2xkIGNoaWxkcmVuIGluIFN0dWR5IDIuIEZvciBlYWNoIGNvbmNlcHR1YWwgdW5pdCwgc2NvcmVzIGNvdWxkIHJhbmdlIGZyb20gMC0xLiBJbmRpdmlkdWFsIGNoaWxkcmVuIGFyZSBwbG90dGVkIGFzIHNtYWxsLCB0cmFuc2x1Y2VudCBjaXJjbGVzOyBtZWFuIHNjb3JlcyBhbW9uZyBhZHVsdHMgYXJlIHBsb3R0ZWQgYXMgbGFyZ2VyLCBzb2xpZCBkaWFtb25kcy4gRXJyb3IgYmFycyBhcmUgOTUlIGJvb3RzdHJhcHBlZCBjb25maWRlbmNlIGludGVydmFscy4gTGluZXMgY29ycmVzcG9uZCB0byBzaW1wbGUgbGluZWFyIHJlZ3Jlc3Npb25zIChmb3JtdWxhOiBzY29yZSB+IGFnZSkuIiwgMTEwKSwgeCA9IDAsIGhqdXN0ID0gMCkKYGBgCgpgYGB7ciwgaW5jbHVkZSA9IFQsIGZpZy53aWR0aCA9IDUsIGZpZy5hc3AgPSAwLjV9CmdnZHJhdyhmaWd1cmU1LjNfcGxvdHNfY2FwKQpgYGAKCgojIyBEaXNjdXNzaW9uCgoKIyBTdHVkeSAzOiBDb25jZXB0dWFsIGNoYW5nZSBvdmVyIGVhcmx5IGFuZCBtaWRkbGUgY2hpbGRob29kICg0LTl5KQoKU3R1ZHkgMyBidWlsZHMgb24gdGhlIGludmVzdGlnYXRpb24gb2YgbWlkZGxlIGNoaWxkaG9vZCAoNy05eSkgaW5pdGlhdGVkIGluIFN0dWR5IDIgYW5kIGV4dGVuZHMgdGhpcyBleHBsb3JhdGlvbiBvZiBjb25jZXB0dWFsIGNoYW5nZSBpbnRvIGVhcmxpZXIgY2hpbGRob29kICg0LTZ5KS4gSW4gdGhpcyBjaGFwdGVyLCBJIGFnYWluIGZvY3VzIG9uIHdoYXQgdGhpcyBzdHVkeSBjYW4gcmV2ZWFsIGFib3V0IGNoYW5nZXMgaW4gdGhlIGRlcGxveW1lbnQgb2YgdGhpcyBjb25jZXB04oCUaS5lLiwgdGhlIGF0dHJpYnV0aW9uIG9mIEJPRFksIEhFQVJULCBhbmQgTUlORCB0byB2YXJpb3VzIGJlaW5ncyBpbiB0aGUgd29ybGTigJRvdmVyIHRoZSBjb3Vyc2Ugb2YgZWFybHkgYW5kIG1pZGRsZSBjaGlsZGhvb2QgKDctOXkpLgoKVG8gcmV2aWV3LCBpbiBTdHVkeSAzLCBgciBucm93KGQzX2FkX3dpZGUpYCBVUyBhZHVsdHMsIGByIG5yb3coZDNfNzlfd2lkZSlgICJvbGRlciIgY2hpbGRyZW4gKGByIHN1bW1hcnkoZDNfNzkkYWdlKVsiTWluLiJdICU+JSByb3VuZCgyKSAlPiUgZm9ybWF0KG5zbWFsbCA9IDIpYC1gciBzdW1tYXJ5KGQzXzc5JGFnZSlbIk1heC4iXSAlPiUgcm91bmQoMikgJT4lIGZvcm1hdChuc21hbGwgPSAyKWAgeWVhcnM7IG1lZGlhbjogYHIgc3VtbWFyeShkM183OSRhZ2UpWyJNZWRpYW4iXSAlPiUgcm91bmQoMikgJT4lIGZvcm1hdChuc21hbGwgPSAyKWB5KSwgYW5kIGByIG5yb3coZDNfNDZfd2lkZSlgICJ5b3VuZ2VyIiBjaGlsZHJlbiAoYHIgc3VtbWFyeShkM180NiRhZ2UpWyJNaW4uIl0gJT4lIHJvdW5kKDIpICU+JSBmb3JtYXQobnNtYWxsID0gMilgLWByIHN1bW1hcnkoZDNfNDYkYWdlKVsiTWF4LiJdICU+JSByb3VuZCgyKSAlPiUgZm9ybWF0KG5zbWFsbCA9IDIpYCB5ZWFyczsgbWVkaWFuOiBgciBzdW1tYXJ5KGQzXzQ2JGFnZSlbIk1lZGlhbiJdICU+JSByb3VuZCgyKSAlPiUgZm9ybWF0KG5zbWFsbCA9IDIpYHkpIGVhY2ggYXNzZXNzZWQgYSBzaW5nbGUgdGFyZ2V0IGNoYXJhY3RlciBvbiAyMCBtZW50YWwgY2FwYWNpdGllcy4gVGhpcyBzdHVkeSBlbXBsb3llZCB0aGUgImRpdmVyc2UgY2hhcmFjdGVycyIgdmFyaWFudCBvZiB0aGUgZ2VuZXJhbCBhcHByb2FjaCwgd2l0aCBwYXJ0aWNpcGFudHMgcmFuZG9tbHkgb3IgcHNldWRvLXJhbmRvbWx5IGFzc2lnbmVkIHRvIGFzc2VzcyBvbmUgb2YgdGhlIGZvbGxvd2luZyA5IGNoYXJhY3RlcnM6IGFuIGVsZXBoYW50LCBhIGdvYXQsIGEgbW91c2UsIGEgYmlyZCwgYSBiZWV0bGUsIGEgdGVkZHkgYmVhciwgYSBkb2xsLCBhIHJvYm90LCBvciBhIGNvbXB1dGVyLiAoU2VlIENoYXB0ZXIgSUkgZm9yIGRldGFpbGVkIG1ldGhvZHMuKQoKIyMgU3BlY2lhbCBub3RlcyBvbiBkYXRhIHByb2Nlc3NpbmcgYW5kIGFuYWx5c2lzCgpBcyBpbiBTdHVkeSAyLCB0byBmYWNpbGl0YXRlIGNvbXBhcmlzb24gYmV0d2VlbiB0aGUgdGhyZWUgYWdlIGdyb3VwcyBpbmNsdWRlZCBpbiBTdHVkeSAzLCBJIHVzZSBhZHVsdHMnIF9CT0RZXywgX0hFQVJUXywgYW5kIF9NSU5EXyBzY2FsZXMgKGFzIGRlc2NyaWJlZCBpbiBDaGFwdGVyIElWKSB0byBhbmFseXplIGJvdGggYWdlIGdyb3Vwcy4gRm9yIGFuYWx5c2VzIHVzaW5nIHNjYWxlcyBkZXJpdmVkIGZyb20gRUZBIG9mIGNoaWxkcmVuJ3Mgb3duIHJlc3BvbnNlcywgc2VlIFtYWCBBcHBlbmRpeCBDXS4KCiMjIFJlc3VsdHMKCiMjIyBBZHVsdHMKCmBgYHtyfQpwbG90c19kM19hZCA8LSBjaGFyYWN0ZXJfbXVsdGlwbG90KGQzX2FkX3Njb3JlZF9hZCwgc2hvd19hbmltX2J5X3N1YmogPSBULAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBsb3RfbGFiZWxzID0gYygiQTEiLCAiQTIiKSkKCnBsb3RzX2QzX2FkX3RpdGxlIDwtIHBsb3RfZ3JpZCgKICBnZ2RyYXcoKSArIAogICAgZHJhd19sYWJlbCgiU3R1ZHkgMzogQWR1bHRzIiwgc2l6ZSA9IDE2LCAKICAgICAgICAgICAgICAgZm9udGZhY2UgPSAnYm9sZCcsIHggPSAwLCBoanVzdCA9IDApLAogIHBsb3RzX2QzX2FkLAogIG5jb2wgPSAxLCByZWxfaGVpZ2h0cyA9IGMoMC4xMiwgMSkpCmBgYAoKYGBge3IsIGZpZy53aWR0aCA9IDUsIGZpZy5hc3AgPSAwLjZ9CiMgaW50ZXJpbSBwbG90IGZvciBlYXNlIG9mIHdyaXRpbmcKcGxvdHNfZDNfYWRfdGl0bGUKYGBgCgojIyMgQ2hpbGRyZW4gKDctOXkpCgpgYGB7cn0KcGxvdHNfZDNfNzkgPC0gY2hhcmFjdGVyX211bHRpcGxvdChkM183OV9zY29yZWRfYWQsIHNob3dfYW5pbV9ieV9zdWJqID0gVCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwbG90X2xhYmVscyA9IGMoIkIxIiwgIkIyIikpCgpwbG90c19kM183OV90aXRsZSA8LSBwbG90X2dyaWQoCiAgZ2dkcmF3KCkgKyAKICAgIGRyYXdfbGFiZWwoIlN0dWR5IDM6IENoaWxkcmVuLCA3LTl5Iiwgc2l6ZSA9IDE2LCAKICAgICAgICAgICAgICAgZm9udGZhY2UgPSAnYm9sZCcsIHggPSAwLCBoanVzdCA9IDApLAogIHBsb3RzX2QzXzc5LAogIG5jb2wgPSAxLCByZWxfaGVpZ2h0cyA9IGMoMC4xMiwgMSkpCmBgYAoKYGBge3IsIGZpZy53aWR0aCA9IDUsIGZpZy5hc3AgPSAwLjZ9CiMgaW50ZXJpbSBwbG90IGZvciBlYXNlIG9mIHdyaXRpbmcKcGxvdHNfZDNfNzlfdGl0bGUKYGBgCgojIyMgQ2hpbGRyZW4gKDQtNnkpCgpgYGB7cn0KcGxvdHNfZDNfNDYgPC0gY2hhcmFjdGVyX211bHRpcGxvdChkM180Nl9zY29yZWRfYWQsIHNob3dfYW5pbV9ieV9zdWJqID0gVCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwbG90X2xhYmVscyA9IGMoIkMxIiwgIkMyIikpCgpwbG90c19kM180Nl90aXRsZSA8LSBwbG90X2dyaWQoCiAgZ2dkcmF3KCkgKyAKICAgIGRyYXdfbGFiZWwoIlN0dWR5IDM6IENoaWxkcmVuLCA0LTZ5Iiwgc2l6ZSA9IDE2LCAKICAgICAgICAgICAgICAgZm9udGZhY2UgPSAnYm9sZCcsIHggPSAwLCBoanVzdCA9IDApLAogIHBsb3RzX2QzXzQ2LAogIG5jb2wgPSAxLCByZWxfaGVpZ2h0cyA9IGMoMC4xMiwgMSkpCmBgYAoKYGBge3IsIGZpZy53aWR0aCA9IDUsIGZpZy5hc3AgPSAwLjZ9CiMgaW50ZXJpbSBwbG90IGZvciBlYXNlIG9mIHdyaXRpbmcKcGxvdHNfZDNfNDZfdGl0bGUKYGBgCgpgYGB7cn0KZmlndXJlNS40X3Bsb3RzIDwtIHBsb3RfZ3JpZChwbG90c19kM19hZF90aXRsZSwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGxvdHNfZDNfNzlfdGl0bGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGxvdHNfZDNfNDZfdGl0bGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmNvbCA9IDEpCmBgYAoKYGBge3J9CmZpZ3VyZTUuNF9wbG90c19jYXAgPC0gYWRkX3N1YihmaWd1cmU1LjRfcGxvdHMsIHN0cl93cmFwKCJGaWd1cmUgNS40OiBBdHRyaWJ1dGlvbnMgb2YgQk9EWSwgSEVBUlQsIGFuZCBNSU5EIGFtb25nIChBKSBhZHVsdHMsIChCKSA3LSB0byA5LXllYXItb2xkIGNoaWxkcmVuLCBhbmQgKEMpIDQtIHRvIDYteWVhci1vbGQgY2hpbGRyZW4gaW4gU3R1ZHkgMy4gRm9yIGVhY2ggY29uY2VwdHVhbCB1bml0LCBzY29yZXMgY291bGQgcmFuZ2UgZnJvbSAwLTEuIFBsb3RzIGluY2x1ZGUgc2NvcmVzIGJ5IHRhcmdldCBjaGFyYWN0ZXIgKHBhbmVscyBBMSwgQjEsIGFuZCBDMSksIHNjb3JlcyBieSBhbmltYWN5IHN0YXR1cyAoQTIsIEIyLCBhbmQgQzIpLCBhbmQgZGlzdHJpYnV0aW9ucyBvZiBzY29yZXMgKHBhbmVscyBBMywgQjMsIGFuZCBDMykuIEluZGl2aWR1YWwgcGFydGljaXBhbnRzIGFyZSBwbG90dGVkIGFzIHNtYWxsLCB0cmFuc2x1Y2VudCBjaXJjbGVzLCBhbmQgbWVhbiBzY29yZXMgYnkgY2hhcmFjdGVyIGFyZSBwbG90dGVkIGFzIGxhcmdlciwgc29saWQgZGlhbW9uZHMuIEVycm9yIGJhcnMgYXJlIDk1JSBib290c3RyYXBwZWQgY29uZmlkZW5jZSBpbnRlcnZhbHMuIiwgMTE1KSwgeCA9IDAsIGhqdXN0ID0gMCkKYGBgCgpgYGB7ciwgaW5jbHVkZSA9IFQsIGZpZy53aWR0aCA9IDUsIGZpZy5hc3AgPSAxLjd9CmdnZHJhdyhmaWd1cmU1LjRfcGxvdHNfY2FwKQpgYGAKCiMjIyBEZXZlbG9wbWVudGFsIGNvbXBhcmlzb24KCiMjIyMgQ2hpbGRyZW4gdnMuIGFkdWx0cwoKYGBge3J9CmQzXzQ2NzlhZF9zY29yZWRfYWQgPC0gZnVsbF9qb2luKGQzX2FkX3Njb3JlZF9hZCwgZDNfNzlfc2NvcmVkX2FkKSAlPiUKICBmdWxsX2pvaW4oZDNfNDZfc2NvcmVkX2FkKSAlPiUKICBsZWZ0X2pvaW4oYW5pbV9sb29rdXApICU+JQogIG11dGF0ZShjaGFyYWN0ZXIgPSBmYWN0b3IoY2hhcmFjdGVyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV2ZWxzID0gbGV2ZWxzKGQzX2FkX3Njb3JlZF9hZCRjaGFyYWN0ZXIpKSwKICAgICAgICAgYWdlX2dyb3VwID0gZmFjdG9yKGFnZV9ncm91cCkpCgpjb250cmFzdHMoZDNfNDY3OWFkX3Njb3JlZF9hZCRjaGFyYWN0ZXIpIDwtIGNvbnRyYXN0c19zdW1fZHYwOQpjb250cmFzdHMoZDNfNDY3OWFkX3Njb3JlZF9hZCRmYWN0b3IpIDwtIGNvbnRyYXN0c19jbnQzX2ZhY3Rvcgpjb250cmFzdHMoZDNfNDY3OWFkX3Njb3JlZF9hZCRhbmltX2luYW4pIDwtIGNvbnRyYXN0c19zdW0yX2FuaW0KY29udHJhc3RzKGQzXzQ2NzlhZF9zY29yZWRfYWQkYWdlX2dyb3VwKSA8LSBjb250cmFzdHNfZHVtM19hZ2VncApgYGAKCmBgYHtyfQojIHJfZDNfZGV2Z3BfQk9EWSA8LSBicm0oc2NvcmUgfiBhbmltX2luYW4gKiBhZ2VfZ3JvdXAsCiMgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhID0gZDNfNDY3OWFkX3Njb3JlZF9hZCAlPiUKIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsdGVyKGZhY3RvciA9PSAiQk9EWSIpLAojICAgICAgICAgICAgICAgICAgICAgICAgICAgY29yZXMgPSA0LCBjb250cm9sID0gbGlzdChhZGFwdF9kZWx0YSA9IDAuOTkpKQojIAojIHNhdmVSRFMocl9kM19kZXZncF9CT0RZLCAiLi9zdG9yZWQvYnJtc19tb2RlbHMvcl9kM19kZXZncF9CT0RZIikKCnJfZDNfZGV2Z3BfQk9EWSA8LSByZWFkUkRTKCIuL3N0b3JlZC9icm1zX21vZGVscy9yX2QzX2RldmdwX0JPRFkiKQoKc3VtbWFyeShyX2QzX2RldmdwX0JPRFkpCmBgYAoKYGBge3J9CiMgcl9kM19kZXZncF9IRUFSVCA8LSBicm0oc2NvcmUgfiBhbmltX2luYW4gKiBhZ2VfZ3JvdXAsCiMgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhID0gZDNfNDY3OWFkX3Njb3JlZF9hZCAlPiUKIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsdGVyKGZhY3RvciA9PSAiSEVBUlQiKSwKIyAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvcmVzID0gNCwgY29udHJvbCA9IGxpc3QoYWRhcHRfZGVsdGEgPSAwLjk5KSkKIyAKIyBzYXZlUkRTKHJfZDNfZGV2Z3BfSEVBUlQsICIuL3N0b3JlZC9icm1zX21vZGVscy9yX2QzX2RldmdwX0hFQVJUIikKCnJfZDNfZGV2Z3BfSEVBUlQgPC0gcmVhZFJEUygiLi9zdG9yZWQvYnJtc19tb2RlbHMvcl9kM19kZXZncF9IRUFSVCIpCgpzdW1tYXJ5KHJfZDNfZGV2Z3BfSEVBUlQpCmBgYAoKYGBge3J9CiMgcl9kM19kZXZncF9NSU5EIDwtIGJybShzY29yZSB+IGFuaW1faW5hbiAqIGFnZV9ncm91cCwKIyAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEgPSBkM180Njc5YWRfc2NvcmVkX2FkICU+JQojICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWx0ZXIoZmFjdG9yID09ICJNSU5EIiksCiMgICAgICAgICAgICAgICAgICAgICAgICAgICBjb3JlcyA9IDQsIGNvbnRyb2wgPSBsaXN0KGFkYXB0X2RlbHRhID0gMC45OSkpCiMgCiMgc2F2ZVJEUyhyX2QzX2RldmdwX01JTkQsICIuL3N0b3JlZC9icm1zX21vZGVscy9yX2QzX2RldmdwX01JTkQiKQoKcl9kM19kZXZncF9NSU5EIDwtIHJlYWRSRFMoIi4vc3RvcmVkL2JybXNfbW9kZWxzL3JfZDNfZGV2Z3BfTUlORCIpCgpzdW1tYXJ5KHJfZDNfZGV2Z3BfTUlORCkKYGBgCgpgYGB7cn0KcmVndGFiX2QzX2RldmdwIDwtIHJlZ3RhYl9kZXZncF9mdW4oCiAgcmVnX2JvZHkgPSByX2QzX2RldmdwX0JPRFksIAogIHJlZ19oZWFydCA9IHJfZDNfZGV2Z3BfSEVBUlQsCiAgcmVnX21pbmQgPSByX2QzX2RldmdwX01JTkQsCiAgYWdlX2xldmVscyA9IGMoImFnZV9ncm91cF9vbGQiLCAiYWdlX2dyb3VwX3luZyIpLCAKICBhZ2VfbGFiZWxzID0gYygiT2xkZXIgY2hpbGRyZW4gKDctOXkpIHZzLiBhZHVsdHMiLAogICAgICAgICAgICAgICAgICJZb3VuZ2VyIGNoaWxkcmVuICg0LTZ5KSB2cy4gYWR1bHRzIikpCmBgYAoKYGBge3J9CnRhYmxlNS4zIDwtIGRldmdwX3RhYmxlX2Z1bihyZWd0YWJfZGV2Z3AgPSByZWd0YWJfZDNfZGV2Z3AsIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgbl9jaGFyYWN0ZXJzID0gMiwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YWJsZV9uYW1lID0gIlRhYmxlIDUuMyIsIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgc3R1ZHlfbmFtZSA9ICJTdHVkeSAzIiwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhZ2VfZ3JvdXAgPSAiNC0gdG8gOS15ZWFyLW9sZCBjaGlsZHJlbiIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBuX2FnZV9ncm91cHMgPSAsIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhcl9jb21wYXJlX2xhYmVsID0gIkFuaW1hdGUgY2hhcmFjdGVycyB2cy4gR00iKQpgYGAKCmBgYHtyLCBpbmNsdWRlID0gVH0KdGFibGU1LjMKYGBgCgpOZWl0aGVyIG9sZGVyIG5vciB5b3VuZ2VyIGNoaWxkcmVuJ3MgX0JPRFlfIHNjb3JlcyB3ZXJlIGdlbmVyYWxseSBoaWdoZXIgdGhhbiBhZHVsdHMnIChzZWUgVGFibGUgNS4zLCAiT2xkZXIgY2hpbGRyZW4gdnMuIGFkdWx0cyIgYW5kICJZb3VuZ2VyIGNoaWxkcmVuIHZzLiBhZHVsdHMiIHJvd3MgZm9yIHRoZSBCT0RZIGRvbWFpbiksIGJ1dCBpbiBib3RoIGdyb3VwcyBvZiBjaGlsZHJlbiB0aGUgZGlmZmVyZW5jZSBpbiBfQk9EWV8gc2NvcmVzIGJldHdlZW4gYW5pbWF0ZSB2cy4gaW5hbmltYXRlIGNoYXJhY3RlcnMgd2FzIGF0dGVudWF0ZWQsIHJlbGF0aXZlIHRvIGFkdWx0cyAoc2VlIFRhYmxlIDUuMywgIkludGVyYWN0aW9uIiByb3cgZm9yIHRoZSBCT0RZIGRvbWFpbikuCgpJbiB0aGUgX0hFQVJUXyBkb21haW4sIGJvdGggb2xkZXIgYW5kIHlvdW5nZXIgY2hpbGRyZW4ncyBfSEVBUlRfIHNjb3JlcyB3ZXJlIGdlbmVyYWxseSBoaWdoZXIgdGhhbiBhZHVsdHMnIChzZWUgVGFibGUgNS4zLCAiQ2hpbGRyZW4gdnMuIGFkdWx0cyIgcm93IGZvciB0aGUgSEVBUlQgZG9tYWluLCBhbmQgRmlndXJlIDUuNCwgbWlkZGxlIHJvdyksIGJ1dCB0aGlzIGRpZmZlcmVuY2UgZGlkIG5vdCB2YXJ5IHN1YnN0YW50aWFsbHkgYWNyb3NzIHRhcmdldCBjaGFyYWN0ZXJzIChzZWUgVGFibGUgNS4zLCAiSW50ZXJhY3Rpb24iIHJvdyBmb3IgdGhlIEJPRFkgZG9tYWluKS4KCkZpbmFsbHksIGluIHRoZSBfTUlORF8gZG9tYWluLCB5b3VuZ2VyIGNoaWxkcmVuJ3MgKGJ1dCBub3Qgb2xkZXIgY2hpbGRyZW4ncykgX01JTkRfIHNjb3JlcyB3ZXJlIHN1YnN0YW50aWFsbHkgbG93ZXIgdGhhbiBhZHVsdHMnIChzZWUgVGFibGUgNS4zLCAiT2xkZXIgY2hpbGRyZW4gdnMuIGFkdWx0cyIgYW5kICJZb3VuZ2VyIGNoaWxkcmVuIHZzLiBhZHVsdHMiIHJvd3MgZm9yIHRoZSBNSU5EIGRvbWFpbikuIEluIGFkZGl0aW9uLCBpbiBib3RoIGdyb3VwcyBvZiBjaGlsZHJlbiB0aGUgZGlmZmVyZW5jZSBpbiBfTUlORF8gc2NvcmVzIGJldHdlZW4gYW5pbWF0ZSB2cy4gaW5hbmltYXRlIGNoYXJhY3RlcnMgd2FzIGF0dGVudWF0ZWQsIHJlbGF0aXZlIHRvIGFkdWx0cyAoc2VlIFRhYmxlIDUuMywgIkludGVyYWN0aW9uIiByb3cgZm9yIHRoZSBNSU5EIGRvbWFpbikuCgojIyMjIEFnZS1yZWxhdGVkIGRpZmZlcmVuY2VzIGJldHdlZW4gNC05eQoKYGBge3J9CmQzXzQ2Nzlfc2NvcmVkX2FkIDwtIGZ1bGxfam9pbihkM183OV9zY29yZWRfYWQgJT4lIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtdXRhdGUoc3ViaWQgPSBwYXN0ZTAoc3ViaWQsICJfNzkiKSksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkM180Nl9zY29yZWRfYWQgJT4lCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG11dGF0ZShzdWJpZCA9IHBhc3RlMChzdWJpZCwgIl80NiIpKSkgJT4lCiAgbGVmdF9qb2luKGZ1bGxfam9pbihkM183OSAlPiUgbXV0YXRlKHN1YmlkID0gcGFzdGUwKHN1YmlkLCAiXzc5IikpLAogICAgICAgICAgICAgICAgICAgICAgZDNfNDYgJT4lIG11dGF0ZShzdWJpZCA9IHBhc3RlMChzdWJpZCwgIl80NiIpKSkgJT4lCiAgICAgICAgICAgICAgZGlzdGluY3Qoc3ViaWQsIGFnZSkpICU+JQogIGxlZnRfam9pbihhbmltX2xvb2t1cCkgJT4lCiAgZmlsdGVyKCFpcy5uYShhZ2UpKSAlPiUKICBtdXRhdGUoY2hhcmFjdGVyID0gZmFjdG9yKGNoYXJhY3RlciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldmVscyA9IGxldmVscyhkM19hZF9zY29yZWRfYWQkY2hhcmFjdGVyKSksCiAgICAgICAgIGFnZV9jZW50ZXJlZCA9IHNjYWxlKGFnZSwgc2NhbGUgPSBGKSkKCmNvbnRyYXN0cyhkM180Njc5X3Njb3JlZF9hZCRjaGFyYWN0ZXIpIDwtIGNvbnRyYXN0c19zdW1fZHYwOQpjb250cmFzdHMoZDNfNDY3OV9zY29yZWRfYWQkZmFjdG9yKSA8LSBjb250cmFzdHNfY250M19mYWN0b3IKY29udHJhc3RzKGQzXzQ2Nzlfc2NvcmVkX2FkJGFuaW1faW5hbikgPC0gY29udHJhc3RzX3N1bTJfYW5pbQpgYGAKCmBgYHtyfQojIHJfZDNfZGV2c2NvcmVfQk9EWSA8LSBicm0oc2NvcmUgfiBhbmltX2luYW4gKiBhZ2VfY2VudGVyZWQgKwojICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMSB8IGNoYXJhY3RlciksCiMgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhID0gZDNfNDY3OV9zY29yZWRfYWQgJT4lCiMgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbHRlcihmYWN0b3IgPT0gIkJPRFkiKSwKIyAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvcmVzID0gNCwgY29udHJvbCA9IGxpc3QoYWRhcHRfZGVsdGEgPSAwLjk5KSkKIyAKIyBzYXZlUkRTKHJfZDNfZGV2c2NvcmVfQk9EWSwgIi4vc3RvcmVkL2JybXNfbW9kZWxzL3JfZDNfZGV2c2NvcmVfQk9EWSIpCgpyX2QzX2RldnNjb3JlX0JPRFkgPC0gcmVhZFJEUygiLi9zdG9yZWQvYnJtc19tb2RlbHMvcl9kM19kZXZzY29yZV9CT0RZIikKCnN1bW1hcnkocl9kM19kZXZzY29yZV9CT0RZKQpgYGAKCmBgYHtyfQojIHJfZDNfZGV2c2NvcmVfSEVBUlQgPC0gYnJtKHNjb3JlIH4gYW5pbV9pbmFuICogYWdlX2NlbnRlcmVkICsKIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDEgfCBjaGFyYWN0ZXIpLAojICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YSA9IGQzXzQ2Nzlfc2NvcmVkX2FkICU+JQojICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWx0ZXIoZmFjdG9yID09ICJIRUFSVCIpLAojICAgICAgICAgICAgICAgICAgICAgICAgICAgY29yZXMgPSA0LCBjb250cm9sID0gbGlzdChhZGFwdF9kZWx0YSA9IDAuOTkpKQojIAojIHNhdmVSRFMocl9kM19kZXZzY29yZV9IRUFSVCwgIi4vc3RvcmVkL2JybXNfbW9kZWxzL3JfZDNfZGV2c2NvcmVfSEVBUlQiKQoKcl9kM19kZXZzY29yZV9IRUFSVCA8LSByZWFkUkRTKCIuL3N0b3JlZC9icm1zX21vZGVscy9yX2QzX2RldnNjb3JlX0hFQVJUIikKCnN1bW1hcnkocl9kM19kZXZzY29yZV9IRUFSVCkKYGBgCgpgYGB7cn0KIyByX2QzX2RldnNjb3JlX01JTkQgPC0gYnJtKHNjb3JlIH4gYW5pbV9pbmFuICogYWdlX2NlbnRlcmVkICsKIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDEgfCBjaGFyYWN0ZXIpLAojICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YSA9IGQzXzQ2Nzlfc2NvcmVkX2FkICU+JQojICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWx0ZXIoZmFjdG9yID09ICJNSU5EIiksCiMgICAgICAgICAgICAgICAgICAgICAgICAgICBjb3JlcyA9IDQsIGNvbnRyb2wgPSBsaXN0KGFkYXB0X2RlbHRhID0gMC45OSkpCiMgCiMgc2F2ZVJEUyhyX2QzX2RldnNjb3JlX01JTkQsICIuL3N0b3JlZC9icm1zX21vZGVscy9yX2QzX2RldnNjb3JlX01JTkQiKQoKcl9kM19kZXZzY29yZV9NSU5EIDwtIHJlYWRSRFMoIi4vc3RvcmVkL2JybXNfbW9kZWxzL3JfZDNfZGV2c2NvcmVfTUlORCIpCgpzdW1tYXJ5KHJfZDNfZGV2c2NvcmVfTUlORCkKYGBgCgpgYGB7cn0KcmVndGFiX2QzX2RldnNjb3JlIDwtIHJlZ3RhYl9kZXZzY29yZV9mdW4ocmVnX2JvZHkgPSByX2QzX2RldnNjb3JlX0JPRFksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlZ19oZWFydCA9IHJfZDNfZGV2c2NvcmVfSEVBUlQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlZ19taW5kID0gcl9kM19kZXZzY29yZV9NSU5EKQpgYGAKCmBgYHtyfQp0YWJsZTUuNCA8LSBkZXZzY29yZV90YWJsZV9mdW4ocmVndGFiX2RldnNjb3JlID0gcmVndGFiX2QzX2RldnNjb3JlLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5fY2hhcmFjdGVycyA9IDksIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGFibGVfbmFtZSA9ICJUYWJsZSA1LjQiLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0dWR5X25hbWUgPSAiU3R1ZHkgMyIsIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWdlX3JhbmdlID0gIjQtIHRvIDkteWVhci1vbGQgY2hpbGRyZW4iLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1lYW5fYWdlID0gbWVhbihkM180Njc5X3Njb3JlZF9hZCRhZ2UsIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hLnJtID0gVCksIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhcl9jb21wYXJlX2xhYmVsID0gIkFuaW1hdGUgY2hhcmFjdGVycyB2cy4gR00iKQpgYGAKCmBgYHtyLCBpbmNsdWRlID0gVH0KdGFibGU1LjQKYGBgCgpJbiBsaW5lIHdpdGggYW4gYWR1bHQtbGlrZSB1bmRlcnN0YW5kaW5nIG9mIHRoZSBhbmltYXRlLWluYW5pbWF0ZSBkaXN0aW5jdGlvbiwgX0JPRFlfIHNjb3JlcyB3ZXJlIGdlbmVyYWxseSBoaWdoZXIgYW1vbmcgY2hpbGRyZW4gd2hvIGFzc2Vzc2VkIG9uZSBvZiB0aGUgYW5pbWF0ZSB0YXJnZXQgY2hhcmFjdGVycyAoZWxlcGhhbnQsIGdvYXQsIG1vdXNlLCBiaXJkLCBvciBiZWV0bGUpIHRoYW4gYW1vbmcgY2hpbGRyZW4gd2hvIGFzc2Vzc2VkIG9uZSBvZiB0aGUgaW5hbmltYXRlIHRhcmdldCBjaGFyYWN0ZXJzICh0ZWRkeSBiZWFyLCBkb2xsLCByb2JvdCwgb3IgY29tcHV0ZXI7IHNlZSBUYWJsZSA1LjQsICJBbmltYXRlIGNoYXJhY3RlcnMgdnMuIEdNIiByb3cgZm9yIHRoZSBCT0RZIGRvbWFpbikuIFRoZXJlIHdlcmUgbm8gb3ZlcmFsbCBkaWZmZXJlbmNlcyBpbiBfQk9EWV8gc2NvcmVzIG92ZXIgdGhlIGFnZSByYW5nZSAoc2VlIFRhYmxlIDUuNCwgIkV4YWN0IGFnZSIgcm93IGZvciB0aGUgQk9EWSBkb21haW4pLCBidXQgdGhpcyBkaWZmZXJlbmNlIGJldHdlZW4gYW5pbWF0ZSBhbmQgaW5hbmltYXRlIGNoYXJhY3RlcnMgaW5jcmVhc2VkIHdpdGggYWdlIChzZWUgVGFibGUgNS40LCAiSW50ZXJhY3Rpb24iIHJvdyBmb3IgdGhlIEJPRFkgZG9tYWluLCBhbmQgRmlndXJlIDUuNSwgcGFuZWwgQiwgbGVmdG1vc3QgcGxvdCkuIFZpc3VhbCBpbnNwZWN0aW9uIG9mIEZpZ3VyZSA1LjUsIHBhbmVsIEEsIHN1Z2dlc3RzIHRoYXQgdGhlc2UgZ2VuZXJhbCB0cmVuZHMgaGVsZCB0cnVlIGZvciBhbGwgYW5pbWF0ZSB2cy4gaW5hbmltYXRlIHRhcmdldCBjaGFyYWN0ZXJzLgoKQXMgaW4gdGhlIEJPRFkgZG9tYWluLCBfSEVBUlRfIHNjb3JlcyB3ZXJlIGdlbmVyYWxseSBoaWdoZXIgYW1vbmcgY2hpbGRyZW4gd2hvIGFzc2Vzc2VkIG9uZSBvZiB0aGUgYW5pbWF0ZSB0YXJnZXQgY2hhcmFjdGVycyB0aGFuIGFtb25nIHRob3NlIHdobyBhc3Nlc3NlZCBvbmUgb2YgdGhlIGluYW5pbWF0ZSB0YXJnZXQgY2hhcmFjdGVycyAoc2VlIFRhYmxlIDUuNCwgIkFuaW1hdGUgY2hhcmFjdGVycyB2cy4gR00iIHJvdyBmb3IgdGhlIEhFQVJUIGRvbWFpbikuIFRoaXMgYW5hbHlzaXMgcmV2ZWFsZWQgbm8gc3Vic3RhbnRpYWwgYWdlLXJlbGF0ZWQgY2hhbmdlcyBpbiBjaGlsZHJlbidzIF9IRUFSVF8gc2NvcmVzIChzZWUgVGFibGUgNS40LCAiRXhhY3QgYWdlIiBhbmQgIkludGVyYWN0aW9uIiByb3dzIGZvciB0aGUgSEVBUlQgZG9tYWluLCwgYW5kIEZpZ3VyZSA1LjUsIHBhbmVsIEIsIGNlbnRlciBwbG90KS4gVmlzdWFsIGluc3BlY3Rpb24gb2YgRmlndXJlIDUuNSwgcGFuZWwgQSwgc3VnZ2VzdHMgdGhhdCB0aGlzIG1heSByZWZsZWN0IHZhcmlhYmlsaXR5IGFjcm9zcyBzcGVjaWZpYyB0YXJnZXQgY2hhcmFjdGVyczogRm9yIHNvbWUgY2hhcmFjdGVycyAobW9zdCBub3RhYmx5LCB0aGUgcm9ib3QpIGF0dHJpYnV0aW9ucyBvZiBIRUFSVCBhcHBlYXJlZCB0byBpbmNyZWFzZSBvdmVyIHRoaXMgYWdlIHJhbmdlICg0LTl5KSwgd2hpbGUgZm9yIG90aGVyIGNoYXJhY3RlcnMgKG1vc3Qgbm90YWJseSwgdGhlIGJlZXRsZSwgdGhlIGRvbGwsIGFuZCB0aGUgY29tcHV0ZXIpIGF0dHJpYnV0aW9ucyBhcHBlYXJlZCB0byBkZWNyZWFzZTsgZm9yIG1hbnkgb2YgdGhlIHRhcmdldCBjaGFyYWN0ZXJzIGluY2x1ZGVkIGluIHRoaXMgc3R1ZHkgdGhlcmUgYXBwZWFyZWQgdG8gYmUgbm8gc3lzdGVtYXRpYyBhZ2UtcmVsYXRlZCBkaWZmZXJlbmNlcyBpbiBhdHRyaWJ1dGlvbnMgb2YgSEVBUlQuCgpGaW5hbGx5LCBhcyBpbiB0aGUgQk9EWSBhbmQgTUlORCBkb21haW5zLCBfTUlORF8gc2NvcmVzIHdlcmUgZ2VuZXJhbGx5IGhpZ2hlciBhbW9uZyBjaGlsZHJlbiB3aG8gYXNzZXNzZWQgb25lIG9mIHRoZSBhbmltYXRlIHRhcmdldCBjaGFyYWN0ZXJzIHRoYW4gYW1vbmcgdGhvc2Ugd2hvIGFzc2Vzc2VkIG9uZSBvZiB0aGUgaW5hbmltYXRlIHRhcmdldCBjaGFyYWN0ZXJzIChzZWUgVGFibGUgNS40LCAiQmVldGxlIHZzLiBHTSIgcm93IGZvciB0aGUgTUlORCBkb21haW4pLiBXaXRoIGFnZSwgY2hpbGRyZW4ncyBfTUlORF8gc2NvcmVzIGdlbmVyYWxseSBpbmNyZWFzZWQgKHNlZSBUYWJsZSA1LjQsICJFeGFjdCBhZ2UiIHJvdyBmb3IgdGhlIE1JTkQgZG9tYWluKS4gVGhlIGRpZmZlcmVuY2UgYmV0d2VuIGFuaW1hdGUgYW5kIGluYW5pbWF0ZSBjaGFyYWN0ZXJzIGluIF9NSU5EXyBzY29yZXMgZGlkIG5vdCB2YXJ5IHN1YnN0YW50aWFsbHkgd2l0aCBhZ2UgKHNlZSBUYWJsZSA1LjQsICJJbnRlcmFjdGlvbiIgcm93IGZvciB0aGUgTUlORCBkb21haW4sIGFuZCBGaWd1cmUgNS41LCBwYW5lbCBCLCByaWdodG1vc3QgcGxvdCkuIEhvd2V2ZXIsIHZpc3VhbCBpbnNwZWN0aW9uIG9mIEZpZ3VyZSA1LjUsIHBhbmVsIEEsIHN1Z2dlc3RzIHRoYXQgdGhlcmUgd2VyZSB0d28gdGFyZ2V0IGNoYXJhY3RlcnMgZm9yIHdob20gYXR0cmlidXRpb25zIG9mIE1JTkQgZGlkIF9OT1RfIGluY3JlYXNlIHdpdGggYWdl4oCUbmFtZWx5LCB0aGUgdHdvIGluZXJ0IHRveXMgKHRoZSB0ZWRkeSBiZWFyIGFuZCB0aGUgZG9sbCkuIEludGVyZXN0aW5nbHksIHRoaXMgcGxvdCBzdWdnZXN0cyB0aGF0IHRoZSB0d28gdGVjaG5vbG9naWVzICh0aGUgcm9ib3QgYW5kIHRoZSBjb21wdXRlcikgYXBwZWFyIHRvIGJlIGFtb25nIHRoZSBjaGFyYWN0ZXJzIGZvciB3aG9tIGFnZS1yZWxhdGVkIGNoYW5nZXMgaW4gYXR0cmlidXRpb25zIG9mIE1JTkQgbWF5IGhhdmUgYmVlbiBtb3N0IGRyYW1hdGlj4oCUYnV0IHRoaXMgZ2VuZXJhbCB0cmVuZCBvZiBpbmNyZWFzaW5nIGF0dHJpYnV0aW9ucyBvZiBNSU5EIGFsc28gYXBwZWFycyB0byBoYXZlIGFwcGxpZWQgdG8gYWxsIG9mIHRoZSBhbmltYXRlIGNoYXJhY3RlcnMuCgpgYGB7cn0KcGxvdHNfZDNfZGV2X2NoYXIgPC0gY2hhcmFjdGVyX2RldnBsb3QoCiAgZGZfc2NvcmVkX2FkID0gZDNfYWRfc2NvcmVkX2FkLCAKICBkZl9zY29yZWRfY2ggPSBmdWxsX2pvaW4oZDNfNzlfc2NvcmVkX2FkICU+JSAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtdXRhdGUoc3ViaWQgPSBwYXN0ZTAoc3ViaWQsICJfNzkiKSksCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGQzXzQ2X3Njb3JlZF9hZCAlPiUKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtdXRhdGUoc3ViaWQgPSBwYXN0ZTAoc3ViaWQsICJfNDYiKSkpLCAKICBkZl9hZ2UgPSBmdWxsX2pvaW4oZDNfNzkgJT4lCiAgICAgICAgICAgICAgICAgICAgICAgbXV0YXRlKHN1YmlkID0gcGFzdGUwKHN1YmlkLCAiXzc5IikpLAogICAgICAgICAgICAgICAgICAgICBkM180NiAlPiUKICAgICAgICAgICAgICAgICAgICAgICBtdXRhdGUoc3ViaWQgPSBwYXN0ZTAoc3ViaWQsICJfNDYiKSkpKQpgYGAKCmBgYHtyfQpwbG90c19kM19kZXZfYW5pbSA8LSBjaGFyYWN0ZXJfZGV2cGxvdCgKICBkZl9zY29yZWRfYWQgPSBkM19hZF9zY29yZWRfYWQgJT4lCiAgICBsZWZ0X2pvaW4oYW5pbV9sb29rdXApICU+JQogICAgbXV0YXRlKGNoYXJhY3RlciA9IGFuaW1faW5hbiksIAogIGRmX3Njb3JlZF9jaCA9IGZ1bGxfam9pbihkM183OV9zY29yZWRfYWQgJT4lIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIG11dGF0ZShzdWJpZCA9IHBhc3RlMChzdWJpZCwgIl83OSIpKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgZDNfNDZfc2NvcmVkX2FkICU+JQogICAgICAgICAgICAgICAgICAgICAgICAgICAgIG11dGF0ZShzdWJpZCA9IHBhc3RlMChzdWJpZCwgIl80NiIpKSkgJT4lCiAgICBsZWZ0X2pvaW4oYW5pbV9sb29rdXApICU+JQogICAgbXV0YXRlKGNoYXJhY3RlciA9IGFuaW1faW5hbiksIAogIGRmX2FnZSA9IGZ1bGxfam9pbihkM183OSAlPiUKICAgICAgICAgICAgICAgICAgICAgICBtdXRhdGUoc3ViaWQgPSBwYXN0ZTAoc3ViaWQsICJfNzkiKSksCiAgICAgICAgICAgICAgICAgICAgIGQzXzQ2ICU+JQogICAgICAgICAgICAgICAgICAgICAgIG11dGF0ZShzdWJpZCA9IHBhc3RlMChzdWJpZCwgIl80NiIpKSkpCmBgYAoKYGBge3J9CmZpZ3VyZTUuNV9jaGFyIDwtIHBsb3RzX2QzX2Rldl9jaGFyICsKICBsYWJzKHRpdGxlID0gIlN0dWR5IDM6IENoaWxkcmVuLCA0LTl5IChieSB0YXJnZXQgY2hhcmFjdGVyKSIpCgpmaWd1cmU1LjVfYW5pbSA8LSBwbG90c19kM19kZXZfYW5pbSArCiAgbGFicyh0aXRsZSA9ICJTdHVkeSAzOiBDaGlsZHJlbiwgNC05eSAoYnkgYW5pbWFjeSBzdGF0dXMpIikgKwogIHNjYWxlX2NvbG9yX21hbnVhbCgiQW5pbWFjeSBzdGF0dXMiLCB2YWx1ZXMgPSBjb2xvcnNBSSwKICAgICAgICAgICAgICAgICAgICAgZ3VpZGUgPSBndWlkZV9sZWdlbmQoZGlyZWN0aW9uID0gImhvcml6b250YWwiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvdmVycmlkZS5hZXMgPSBsaXN0KGFscGhhID0gMSkpKSArCiAgc2NhbGVfZmlsbF9tYW51YWwoIkFuaW1hY3kgc3RhdHVzIiwgdmFsdWVzID0gY29sb3JzQUksCiAgICAgICAgICAgICAgICAgICAgZ3VpZGUgPSBndWlkZV9sZWdlbmQoZGlyZWN0aW9uID0gImhvcml6b250YWwiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG92ZXJyaWRlLmFlcyA9IGxpc3QoYWxwaGEgPSAxKSkpCgpmaWd1cmU1LjVfcGxvdHMgPC0gcGxvdF9ncmlkKGZpZ3VyZTUuNV9jaGFyLCBmaWd1cmU1LjVfYW5pbSwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmNvbCA9IDEsIGxhYmVscyA9ICJBVVRPIikKYGBgCgpgYGB7cn0KZmlndXJlNS41X3Bsb3RzX2NhcCA8LSBhZGRfc3ViKGZpZ3VyZTUuNV9wbG90cywgc3RyX3dyYXAoIkZpZ3VyZSA1LjU6IENoYW5nZXMgaW4gYXR0cmlidXRpb25zIG9mIEJPRFksIEhFQVJULCBhbmQgTUlORCBhbW9uZyA0LSB0byA5LXllYXItb2xkIGNoaWxkcmVuIGluIFN0dWR5IDMuIEZvciBlYWNoIGNvbmNlcHR1YWwgdW5pdCwgc2NvcmVzIGNvdWxkIHJhbmdlIGZyb20gMC0xLiBJbmRpdmlkdWFsIGNoaWxkcmVuIGFyZSBwbG90dGVkIGFzIHNtYWxsLCB0cmFuc2x1Y2VudCBjaXJjbGVzOyBtZWFuIHNjb3JlcyBhbW9uZyBhZHVsdHMgYXJlIHBsb3R0ZWQgYXMgbGFyZ2VyLCBzb2xpZCBkaWFtb25kcy4gRXJyb3IgYmFycyBhcmUgOTUlIGJvb3RzdHJhcHBlZCBjb25maWRlbmNlIGludGVydmFscy4gTGluZXMgY29ycmVzcG9uZCB0byBzaW1wbGUgbGluZWFyIHJlZ3Jlc3Npb25zIChmb3JtdWxhOiBzY29yZSB+IGFnZSkuIiwgMTEwKSwgeCA9IDAsIGhqdXN0ID0gMCkKYGBgCgpgYGB7ciwgaW5jbHVkZSA9IFQsIGZpZy53aWR0aCA9IDUsIGZpZy5hc3AgPSAxfQpnZ2RyYXcoZmlndXJlNS41X3Bsb3RzX2NhcCkKYGBgCgojIyBEaXNjdXNzaW9uCgoKIyBTdHVkeSA0OiBBIGZvY3VzIG9uIGVhcmx5IGNoaWxkaG9vZCAoNC01eSkKClN0dWR5IDQgYnVpbGRzIG9uIFN0dWR5IDMgYnkgcHJvdmlkaW5nIGEgdGFyZ2V0ZWQgaW52ZXN0aWdhdGlvbiBvZiByZXByZXNlbnRhdGlvbnMgb2YgbWVudGFsIGxpZmUgaW4gdGhlIHByZXNjaG9vbCB5ZWFycyAoNC01eSkuIEluIHRoaXMgY2hhcHRlciwgSSBhZ2FpbiBmb2N1cyBvbiB3aGF0IHRoaXMgc3R1ZHkgY2FuIHJldmVhbCBhYm91dCBhdHRyaWJ1dGlvbnMgb2YgQk9EWSwgSEVBUlQsIGFuZCBNSU5EIGF0IHRoZSBlYXJsaWVzdCBwb2ludCBpbiBkZXZlbG9wbWVudCB0aGF0IEkgaGF2ZSBleGFtaW5lZCBzbyBmYXIsIGFuZCBjb21wYXJlIHRoZSBkZXBsb3ltZW50IG9mIHRoaXMgY29uY2VwdCBhbW9uZyB5b3VuZyBjaGlsZHJlbiB2cy4gYWR1bHRzLiAKClRvIHJldmlldywgaW4gU3R1ZHkgNCwgYHIgbnJvdyhkNF9hZF93aWRlKS8yYCBVUyBhZHVsdHMgYW5kIGByIG5yb3coZDRfNDZfd2lkZSkvMmAgVVMgY2hpbGRyZW4gYmV0d2VlbiB0aGUgYWdlcyBvZiBgciBzdW1tYXJ5KGQ0XzQ2JGFnZSlbIk1pbi4iXSAlPiUgcm91bmQoMikgJT4lIGZvcm1hdChuc21hbGwgPSAyKWAtYHIgc3VtbWFyeShkNF80NiRhZ2UpWyJNYXguIl0gJT4lIHJvdW5kKDIpICU+JSBmb3JtYXQobnNtYWxsID0gMilgIHllYXJzIChtZWRpYW46IGByIHN1bW1hcnkoZDRfNDYkYWdlKVsiTWVkaWFuIl0gJT4lIHJvdW5kKDIpICU+JSBmb3JtYXQobnNtYWxsID0gMilgeSkgZWFjaCBhc3Nlc3NlZCB0d28gdGFyZ2V0IGNoYXJhY3RlcnMgb24gMTggbWVudGFsIGNhcGFjaXRpZXMsIHdpdGggYWxsIGFzcGVjdHMgb2YgdGhlIGV4cGVyaW1lbnRhbCBkZXNpZ24gdGFpbG9yZWQgdG8gYmUgYXBwcm9wcmlhdGUgZm9yIHRoaXMgeW91bmdlc3QgYWdlIGdyb3VwLiBUaGlzIHN0dWR5IGVtcGxveWVkIHRoZSAiZWRnZSBjYXNlIiB2YXJpYW50IG9mIHRoZSBnZW5lcmFsIGFwcHJvYWNoLCB3aXRoIHBhcnRpY2lwYW50cyBhc3Nlc3NpbmcgYm90aCBhIGJlZXRsZSBvciBhIHJvYm90IGluIHNlcXVlbmNlICh3aXRoIG9yZGVyIGNvdW50ZXJiYWxhbmNlZCBhY3Jvc3MgcGFydGljaXBhbnRzKS4gKFNlZSBDaGFwdGVyIElJIGZvciBkZXRhaWxlZCBtZXRob2RzLikKCiMjIFNwZWNpYWwgbm90ZXMgb24gZGF0YSBwcm9jZXNzaW5nIGFuZCBhbmFseXNpcwoKQXMgaW4gU3R1ZGllcyAyIGFuZCAzLCB0byBmYWNpbGl0YXRlIGNvbXBhcmlzb24gYmV0d2VlbiBjaGlsZHJlbiBhbmQgYWR1bHRzIGluIFN0dWR5IDQsIEkgdXNlIGFkdWx0cycgX0JPRFlfLCBfSEVBUlRfLCBhbmQgX01JTkRfIHNjYWxlcyAoYXMgZGVzY3JpYmVkIGluIENoYXB0ZXIgSVYpIHRvIGFuYWx5emUgYm90aCBhZ2UgZ3JvdXBzLiBGb3IgYW5hbHlzZXMgdXNpbmcgc2NhbGVzIGRlcml2ZWQgZnJvbSBFRkEgb2YgY2hpbGRyZW4ncyBvd24gcmVzcG9uc2VzLCBzZWUgW1hYIEFwcGVuZGl4IENdLgoKIyMgUmVzdWx0cwoKIyMjIEFkdWx0cwoKYGBge3J9CnBsb3RzX2Q0X2FkIDwtIGNoYXJhY3Rlcl9tdWx0aXBsb3QoZDRfYWRfc2NvcmVkX2FkLCBiaW5fd2lkdGggPSAxLzEwLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBsb3RfbGFiZWxzID0gYygiQTEiLCAiQTIiKSkKCnBsb3RzX2Q0X2FkX3RpdGxlIDwtIHBsb3RfZ3JpZCgKICBnZ2RyYXcoKSArIAogICAgZHJhd19sYWJlbCgiU3R1ZHkgNDogQWR1bHRzIiwgc2l6ZSA9IDE2LCAKICAgICAgICAgICAgICAgZm9udGZhY2UgPSAnYm9sZCcsIHggPSAwLCBoanVzdCA9IDApLAogIHBsb3RzX2Q0X2FkLAogIG5jb2wgPSAxLCByZWxfaGVpZ2h0cyA9IGMoMC4xMiwgMSkpCmBgYAoKYGBge3IsIGZpZy53aWR0aCA9IDQsIGZpZy5hc3AgPSAxfQojIGludGVyaW0gcGxvdCBmb3IgZWFzZSBvZiB3cml0aW5nCnBsb3RzX2Q0X2FkX3RpdGxlCmBgYAoKIyMjIENoaWxkcmVuICg0LTV5KQoKYGBge3J9CnBsb3RzX2Q0XzQ2IDwtIGNoYXJhY3Rlcl9tdWx0aXBsb3QoZDRfNDZfc2NvcmVkX2FkLCBiaW5fd2lkdGggPSAxLzEwLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBsb3RfbGFiZWxzID0gYygiQjEiLCAiQjIiKSkKCnBsb3RzX2Q0XzQ2X3RpdGxlIDwtIHBsb3RfZ3JpZCgKICBnZ2RyYXcoKSArIAogICAgZHJhd19sYWJlbCgiU3R1ZHkgNDogQ2hpbGRyZW4sIDQtNXkiLCBzaXplID0gMTYsIAogICAgICAgICAgICAgICBmb250ZmFjZSA9ICdib2xkJywgeCA9IDAsIGhqdXN0ID0gMCksCiAgcGxvdHNfZDRfNDYsCiAgbmNvbCA9IDEsIHJlbF9oZWlnaHRzID0gYygwLjEyLCAxKSkKYGBgCgpgYGB7ciwgZmlnLndpZHRoID0gNCwgZmlnLmFzcCA9IDF9CiMgaW50ZXJpbSBwbG90IGZvciBlYXNlIG9mIHdyaXRpbmcKcGxvdHNfZDRfNDZfdGl0bGUKYGBgCgpgYGB7cn0KZmlndXJlNS42X3Bsb3RzIDwtIHBsb3RfZ3JpZChwbG90c19kNF9hZF90aXRsZSwgcGxvdHNfZDRfNDZfdGl0bGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmNvbCA9IDIpCmBgYAoKYGBge3J9CmZpZ3VyZTUuNl9wbG90c19jYXAgPC0gYWRkX3N1YihmaWd1cmU1LjZfcGxvdHMsIHN0cl93cmFwKCJGaWd1cmUgNS42OiBBdHRyaWJ1dGlvbnMgb2YgQk9EWSwgSEVBUlQsIGFuZCBNSU5EIGFtb25nIChBKSBhZHVsdHMgYW5kIChCKSA0LSB0byA1LXllYXItb2xkIGNoaWxkcmVuIGluIFN0dWR5IDQuIEZvciBlYWNoIGNvbmNlcHR1YWwgdW5pdCwgc2NvcmVzIGNvdWxkIHJhbmdlIGZyb20gMC0xLiBQbG90cyBpbmNsdWRlIHNjb3JlcyBieSB0YXJnZXQgY2hhcmFjdGVyIChwYW5lbHMgQTEgYW5kIEIxKSBhbmQgZGlzdHJpYnV0aW9ucyBvZiBzY29yZXMgKHBhbmVscyBBMiBhbmQgQjIpLiBJbmRpdmlkdWFsIHBhcnRpY2lwYW50cyBhcmUgcGxvdHRlZCBhcyBzbWFsbCwgdHJhbnNsdWNlbnQgY2lyY2xlcywgYW5kIG1lYW4gc2NvcmVzIGJ5IGNoYXJhY3RlciBhcmUgcGxvdHRlZCBhcyBsYXJnZXIsIHNvbGlkIGRpYW1vbmRzLiBFcnJvciBiYXJzIGFyZSA5NSUgYm9vdHN0cmFwcGVkIGNvbmZpZGVuY2UgaW50ZXJ2YWxzLiIsIDEzNSksIHggPSAwLCBoanVzdCA9IDApCmBgYAoKYGBge3IsIGluY2x1ZGUgPSBULCBmaWcud2lkdGggPSA2LCBmaWcuYXNwID0gMC42fQpnZ2RyYXcoZmlndXJlNS42X3Bsb3RzX2NhcCkKYGBgCgojIyMgRGV2ZWxvcG1lbnRhbCBjb21wYXJpc29uCgojIyMjIENoaWxkcmVuIHZzLiBhZHVsdHMKCmBgYHtyfQpkNF80NmFkX3Njb3JlZF9hZCA8LSBmdWxsX2pvaW4oZDRfYWRfc2NvcmVkX2FkLCBkNF80Nl9zY29yZWRfYWQpICU+JQogIGxlZnRfam9pbihhbmltX2xvb2t1cCkgJT4lCiAgbXV0YXRlKGNoYXJhY3RlciA9IGZhY3RvcihjaGFyYWN0ZXIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXZlbHMgPSBsZXZlbHMoZDRfYWRfc2NvcmVkX2FkJGNoYXJhY3RlcikpLAogICAgICAgICBhZ2VfZ3JvdXAgPSBmYWN0b3IoYWdlX2dyb3VwKSkKCmNvbnRyYXN0cyhkNF80NmFkX3Njb3JlZF9hZCRjaGFyYWN0ZXIpIDwtIGNvbnRyYXN0c19zdW1fZWRnZQpjb250cmFzdHMoZDRfNDZhZF9zY29yZWRfYWQkZmFjdG9yKSA8LSBjb250cmFzdHNfY250M19mYWN0b3IKY29udHJhc3RzKGQ0XzQ2YWRfc2NvcmVkX2FkJGFuaW1faW5hbikgPC0gY29udHJhc3RzX3N1bTJfYW5pbQpjb250cmFzdHMoZDRfNDZhZF9zY29yZWRfYWQkYWdlX2dyb3VwKSA8LSBjb250cmFzdHNfZHVtMl9hZ2VncApgYGAKCmBgYHtyfQojIHJfZDRfZGV2Z3BfQk9EWSA8LSBicm0oc2NvcmUgfiBhbmltX2luYW4gKiBhZ2VfZ3JvdXAsCiMgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhID0gZDRfNDZhZF9zY29yZWRfYWQgJT4lCiMgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbHRlcihmYWN0b3IgPT0gIkJPRFkiKSwKIyAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvcmVzID0gNCwgY29udHJvbCA9IGxpc3QoYWRhcHRfZGVsdGEgPSAwLjk5KSkKIyAKIyBzYXZlUkRTKHJfZDRfZGV2Z3BfQk9EWSwgIi4vc3RvcmVkL2JybXNfbW9kZWxzL3JfZDRfZGV2Z3BfQk9EWSIpCgpyX2Q0X2RldmdwX0JPRFkgPC0gcmVhZFJEUygiLi9zdG9yZWQvYnJtc19tb2RlbHMvcl9kNF9kZXZncF9CT0RZIikKCnN1bW1hcnkocl9kNF9kZXZncF9CT0RZKQpgYGAKCmBgYHtyfQojIHJfZDRfZGV2Z3BfSEVBUlQgPC0gYnJtKHNjb3JlIH4gYW5pbV9pbmFuICogYWdlX2dyb3VwLAojICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YSA9IGQ0XzQ2YWRfc2NvcmVkX2FkICU+JQojICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWx0ZXIoZmFjdG9yID09ICJIRUFSVCIpLAojICAgICAgICAgICAgICAgICAgICAgICAgICAgY29yZXMgPSA0LCBjb250cm9sID0gbGlzdChhZGFwdF9kZWx0YSA9IDAuOTkpKQojIAojIHNhdmVSRFMocl9kNF9kZXZncF9IRUFSVCwgIi4vc3RvcmVkL2JybXNfbW9kZWxzL3JfZDRfZGV2Z3BfSEVBUlQiKQoKcl9kNF9kZXZncF9IRUFSVCA8LSByZWFkUkRTKCIuL3N0b3JlZC9icm1zX21vZGVscy9yX2Q0X2RldmdwX0hFQVJUIikKCnN1bW1hcnkocl9kNF9kZXZncF9IRUFSVCkKYGBgCgpgYGB7cn0KIyByX2Q0X2RldmdwX01JTkQgPC0gYnJtKHNjb3JlIH4gYW5pbV9pbmFuICogYWdlX2dyb3VwLAojICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YSA9IGQ0XzQ2YWRfc2NvcmVkX2FkICU+JQojICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWx0ZXIoZmFjdG9yID09ICJNSU5EIiksCiMgICAgICAgICAgICAgICAgICAgICAgICAgICBjb3JlcyA9IDQsIGNvbnRyb2wgPSBsaXN0KGFkYXB0X2RlbHRhID0gMC45OSkpCiMgCiMgc2F2ZVJEUyhyX2Q0X2RldmdwX01JTkQsICIuL3N0b3JlZC9icm1zX21vZGVscy9yX2Q0X2RldmdwX01JTkQiKQoKcl9kNF9kZXZncF9NSU5EIDwtIHJlYWRSRFMoIi4vc3RvcmVkL2JybXNfbW9kZWxzL3JfZDRfZGV2Z3BfTUlORCIpCgpzdW1tYXJ5KHJfZDRfZGV2Z3BfTUlORCkKYGBgCgpgYGB7cn0KcmVndGFiX2Q0X2RldmdwIDwtIHJlZ3RhYl9kZXZncF9mdW4oCiAgcmVnX2JvZHkgPSByX2Q0X2RldmdwX0JPRFksIAogIHJlZ19oZWFydCA9IHJfZDRfZGV2Z3BfSEVBUlQsCiAgcmVnX21pbmQgPSByX2Q0X2RldmdwX01JTkQsCiAgYWdlX2xldmVscyA9IGMoImFnZV9ncm91cF9jaGlsZCIpLCAKICBhZ2VfbGFiZWxzID0gYygiQ2hpbGRyZW4gdnMuIGFkdWx0cyIpKQpgYGAKCmBgYHtyfQp0YWJsZTUuNSA8LSBkZXZncF90YWJsZV9mdW4ocmVndGFiX2RldmdwID0gcmVndGFiX2Q0X2RldmdwLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5fY2hhcmFjdGVycyA9IDIsIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgdGFibGVfbmFtZSA9ICJUYWJsZSA1LjUiLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0dWR5X25hbWUgPSAiU3R1ZHkgNCIsIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgYWdlX2dyb3VwID0gIjQtIHRvIDUteWVhci1vbGQgY2hpbGRyZW4iLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5fYWdlX2dyb3VwcyA9IDEsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyX2NvbXBhcmVfbGFiZWwgPSAiQmVldGxlIHZzLiBHTSIpCmBgYAoKYGBge3IsIGluY2x1ZGUgPSBUfQp0YWJsZTUuNQpgYGAKClRoZSBhZ2UgY29tcGFyaXNvbiBiZXR3ZWVuIDQtIHRvIDUteWVhci1vbGQgY2hpbGRyZW4gYW5kIGFkdWx0cyBpbiBTdHVkeSA0IHlpZWxkZWQgcmVtYXJrYWJseSBzaW1pbGFyIHJlc3VsdHMgdG8gdGhlIHBhcmFsbGVsIGNvbXBhcmlzb24gYmV0d2VlbiA3LSB0byA5LXllYXItb2xkIGNoaWxkcmVuIGFuZCBhZHVsdHMgaW4gU3R1ZHkgMi4gCgpBcyBpbiBTdHVkeSAyLCBjaGlsZHJlbidzIF9CT0RZXyBzY29yZXMgd2VyZSBnZW5lcmFsbHkgaGlnaGVyIHRoYW4gYWR1bHRzJyAoc2VlIFRhYmxlIDUuNSwgIkNoaWxkcmVuIHZzLiBhZHVsdHMiIHJvdyBmb3IgdGhlIEJPRFkgZG9tYWluKS4gVGhpcyBhcHBlYXJzIHRvIGhhdmUgYmVlbiBwYXJ0aWN1bGFybHkgdHJ1ZSBmb3IgdGhlIHJvYm90IChzZWUgRmlndXJlIDUuNiwgdG9wIHJvdyk7IGFzIGEgcmVzdWx0LCB0aGUgZGlmZmVyZW5jZSBiZXR3ZWVuIHRoZSBiZWV0bGUgYW5kIHRoZSByb2JvdCB3YXMgYXR0ZW51YXRlZCBhbW9uZyBjaGlsZHJlbiwgcmVsYXRpdmUgdG8gYWR1bHRzIChzZWUgVGFibGUgNS41LCAiSW50ZXJhY3Rpb24iIHJvdyBmb3IgdGhlIEJPRFkgZG9tYWluKS4KCkFnYWluLCBhcyBpbiBTdHVkeSAyLCBjaGlsZHJlbidzIF9IRUFSVF8gc2NvcmVzIHdlcmUgYWxzbyBoaWdoZXIgdGhhbiBhZHVsdHMnIChzZWUgVGFibGUgNS41LCAiQ2hpbGRyZW4gdnMuIGFkdWx0cyIgcm93IGZvciB0aGUgSEVBUlQgZG9tYWluLCBhbmQgRmlndXJlIDUuNiwgbWlkZGxlIHJvdykuIEluIFN0dWR5IDQsIHRoaXMgZGlmZmVyZW5jZSBiZXR3ZWVuIGNoaWxkcmVuIGFuZCBhZHVsdHMgd2FzIHNsaWdodGx5IG1vcmUgcHJvbm91bmNlZCBmb3IgdGhlIHJvYm90IHRoYW4gdGhlIGJlZXRsZSAoc2VlIFRhYmxlIDUuNSwgIkludGVyYWN0aW9uIiByb3cgZm9yIHRoZSBCT0RZIGRvbWFpbikuCgpBbmQgeWV0IGFnYWluLCBhcyBpbiBTdHVkeSAyLCB0aGVyZSB3ZXJlIG5vIHN1YnN0YW50aWFsIGRpZmZlcmVuY2VzIGJldHdlZW4gY2hpbGRyZW4gYW5kIGFkdWx0cyBpbiB0aGVpciBfTUlORF8gc2NvcmVzIChzZWUgVGFibGUgNS41IGFuZCBGaWd1cmUgNS42LCBib3R0b20gcm93KQoKIyMjIyBBZ2UtcmVsYXRlZCBkaWZmZXJlbmNlcyBiZXR3ZWVuIDQtNXkKCmBgYHtyfQpkNF80NmFnZV9zY29yZWRfYWQgPC0gZDRfNDZfc2NvcmVkX2FkICU+JQogIGxlZnRfam9pbihkNF80NiAlPiUgZGlzdGluY3Qoc3ViaWQsIGFnZSkpICU+JQogIGxlZnRfam9pbihhbmltX2xvb2t1cCkgJT4lCiAgZmlsdGVyKCFpcy5uYShhZ2UpKSAlPiUKICBtdXRhdGUoY2hhcmFjdGVyID0gZmFjdG9yKGNoYXJhY3RlciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldmVscyA9IGxldmVscyhkNF9hZF9zY29yZWRfYWQkY2hhcmFjdGVyKSksCiAgICAgICAgIGFnZV9jZW50ZXJlZCA9IHNjYWxlKGFnZSwgc2NhbGUgPSBGKSkKCmNvbnRyYXN0cyhkNF80NmFnZV9zY29yZWRfYWQkY2hhcmFjdGVyKSA8LSBjb250cmFzdHNfc3VtX2VkZ2UKY29udHJhc3RzKGQ0XzQ2YWdlX3Njb3JlZF9hZCRmYWN0b3IpIDwtIGNvbnRyYXN0c19jbnQzX2ZhY3Rvcgpjb250cmFzdHMoZDRfNDZhZ2Vfc2NvcmVkX2FkJGFuaW1faW5hbikgPC0gY29udHJhc3RzX3N1bTJfYW5pbQpgYGAKCmBgYHtyfQojIHJfZDRfZGV2c2NvcmVfQk9EWSA8LSBicm0oc2NvcmUgfiBhbmltX2luYW4gKiBhZ2VfY2VudGVyZWQgKyAoMSB8IHN1YmlkKSwKIyAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEgPSBkNF80NmFnZV9zY29yZWRfYWQgJT4lCiMgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbHRlcihmYWN0b3IgPT0gIkJPRFkiKSwKIyAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvcmVzID0gNCwgY29udHJvbCA9IGxpc3QoYWRhcHRfZGVsdGEgPSAwLjk5KSkKIyAKIyBzYXZlUkRTKHJfZDRfZGV2c2NvcmVfQk9EWSwgIi4vc3RvcmVkL2JybXNfbW9kZWxzL3JfZDRfZGV2c2NvcmVfQk9EWSIpCgpyX2Q0X2RldnNjb3JlX0JPRFkgPC0gcmVhZFJEUygiLi9zdG9yZWQvYnJtc19tb2RlbHMvcl9kNF9kZXZzY29yZV9CT0RZIikKCnN1bW1hcnkocl9kNF9kZXZzY29yZV9CT0RZKQpgYGAKCmBgYHtyfQojIHJfZDRfZGV2c2NvcmVfSEVBUlQgPC0gYnJtKHNjb3JlIH4gYW5pbV9pbmFuICogYWdlX2NlbnRlcmVkICsgKDEgfCBzdWJpZCksCiMgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhID0gZDRfNDZhZ2Vfc2NvcmVkX2FkICU+JQojICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWx0ZXIoZmFjdG9yID09ICJIRUFSVCIpLAojICAgICAgICAgICAgICAgICAgICAgICAgICAgY29yZXMgPSA0LCBjb250cm9sID0gbGlzdChhZGFwdF9kZWx0YSA9IDAuOTkpKQojIAojIHNhdmVSRFMocl9kNF9kZXZzY29yZV9IRUFSVCwgIi4vc3RvcmVkL2JybXNfbW9kZWxzL3JfZDRfZGV2c2NvcmVfSEVBUlQiKQoKcl9kNF9kZXZzY29yZV9IRUFSVCA8LSByZWFkUkRTKCIuL3N0b3JlZC9icm1zX21vZGVscy9yX2Q0X2RldnNjb3JlX0hFQVJUIikKCnN1bW1hcnkocl9kNF9kZXZzY29yZV9IRUFSVCkKYGBgCgpgYGB7cn0KIyByX2Q0X2RldnNjb3JlX01JTkQgPC0gYnJtKHNjb3JlIH4gYW5pbV9pbmFuICogYWdlX2NlbnRlcmVkICsgKDEgfCBzdWJpZCksCiMgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhID0gZDRfNDZhZ2Vfc2NvcmVkX2FkICU+JQojICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWx0ZXIoZmFjdG9yID09ICJNSU5EIiksCiMgICAgICAgICAgICAgICAgICAgICAgICAgICBjb3JlcyA9IDQsIGNvbnRyb2wgPSBsaXN0KGFkYXB0X2RlbHRhID0gMC45OSkpCiMgCiMgc2F2ZVJEUyhyX2Q0X2RldnNjb3JlX01JTkQsICIuL3N0b3JlZC9icm1zX21vZGVscy9yX2Q0X2RldnNjb3JlX01JTkQiKQoKcl9kNF9kZXZzY29yZV9NSU5EIDwtIHJlYWRSRFMoIi4vc3RvcmVkL2JybXNfbW9kZWxzL3JfZDRfZGV2c2NvcmVfTUlORCIpCgpzdW1tYXJ5KHJfZDRfZGV2c2NvcmVfTUlORCkKYGBgCgpgYGB7cn0KcmVndGFiX2Q0X2RldnNjb3JlIDwtIHJlZ3RhYl9kZXZzY29yZV9mdW4ocmVnX2JvZHkgPSByX2Q0X2RldnNjb3JlX0JPRFksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlZ19oZWFydCA9IHJfZDRfZGV2c2NvcmVfSEVBUlQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlZ19taW5kID0gcl9kNF9kZXZzY29yZV9NSU5EKQpgYGAKCmBgYHtyfQp0YWJsZTUuNiA8LSBkZXZzY29yZV90YWJsZV9mdW4ocmVndGFiX2RldnNjb3JlID0gcmVndGFiX2Q0X2RldnNjb3JlLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5fY2hhcmFjdGVycyA9IDIsIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGFibGVfbmFtZSA9ICJUYWJsZSA1LjYiLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0dWR5X25hbWUgPSAiU3R1ZHkgNCIsIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWdlX3JhbmdlID0gIjQtIHRvIDUteWVhci1vbGQgY2hpbGRyZW4iLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1lYW5fYWdlID0gbWVhbihkNF80NiRhZ2UsIG5hLnJtID0gVCksIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhcl9jb21wYXJlX2xhYmVsID0gIkJlZXRsZSB2cy4gR00iLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmFuZWZfc3ViaWQgPSBUKQpgYGAKCmBgYHtyLCBpbmNsdWRlID0gVH0KdGFibGU1LjYKYGBgCgpFY2hvaW5nIHRoZSByZXN1bHRzIG9mIFN0dWRpZXMgMiBhbmQgMywgX0JPRFlfIHNjb3JlcyB3ZXJlIGdlbmVyYWxseSBoaWdoZXIgYW1vbmcgY2hpbGRyZW4gd2hvIGFzc2Vzc2VkIHRoZSBiZWV0bGUgKHRoZSBhbmltYXRlIHRhcmdldCBjaGFyYWN0ZXIpIHRoYW4gYW1vbmcgY2hpbGRyZW4gd2hvIGFzc2Vzc2VkIHRoZSByb2JvdCAodGhlIGluYW5pbWF0ZSB0YXJnZXQgY2hhcmFjdGVyOyBzZWUgVGFibGUgNS42LCAiQmVldGxlIHZzLiBHTSIgcm93IGZvciB0aGUgQk9EWSBkb21haW4p4oCUYnV0IHRoaXMgZGlmZmVyZW5jZSBpbmNyZWFzZWQgb3ZlciB0aGUgYWdlIHJhbmdlIChzZWUgVGFibGUgNS42LCAiSW50ZXJhY3Rpb24iIHJvdyBmb3IgdGhlIEJPRFkgZG9tYWluLCBhbmQgRmlndXJlIDUuNywgbGVmdG1vc3QgcGxvdCkuIEludGVyZXN0aW5nbHksIHZpc3VhbCBpbnNwZWN0aW9uIG9mIEZpZ3VyZSA1Ljcgc3VnZ2VzdHMgdGhhdCB0aGlzIHdhcyBkcml2ZW4gYnkgaW5jcmVhc2luZyBhdHRyaWJ1dGlvbnMgb2YgQk9EWSB0byB0aGUgYmVldGxlLCByYXRoZXIgdGhhbiBkZWNyZWFzaW5nIGF0dHJpYnV0aW9ucyB0byB0aGUgcm9ib3TigJR0aGUgcmV2ZXJzZSBvZiB3aGF0IG9uZSBtaWdodCBwcmVkaWN0IGlmIHByZXNjaG9vbC1hZ2UgY2hpbGRyZW4gd2VyZSBkaXNwbGF5aW5nIGFuICJhbmltaXN0IiB0ZW5kZW5jeSBpbiB0aGVpciBtZW50YWwgY2FwYWNpdHkgYXR0cmlidXRpb25zLgoKSW4gYm90aCB0aGUgSEVBUlQgYW5kIE1JTkQgZG9tYWlucywgY2hpbGRyZW4ncyBzY29yZXMgZGlkIG5vdCBkaWZmZXIgcmVsaWFibHkgYWNyb3NzIHRoZSB0d28gdGFyZ2V0IGNoYXJhY3RlcnMgaW4gdGhpcyBzdHVkeSAoc2VlIFRhYmxlIDUuNiwgIkJlZXRsZSB2cy4gR00iIHJvdyBmb3IgdGhlIEhFQVJUIGFuZCBNSU5EIGRvbWFpbnMpLCBhbmQgZGlkIG5vdCB2YXJ5IHJlbGlhYmx5IG92ZXIgdGhlIGFnZSByYW5nZSAoc2VlIFRhYmxlIDUuNiwgIkV4YWN0IGFnZSIgYW5kICJJbnRlcmFjdGlvbiIgcm93cyBmb3IgdGhlIEhFQVJUIGFuZCBNSU5EIGRvbWFpbnMsIGFuZCBGaWd1cmUgNS43LCBjZW50ZXIgYW5kIHJpZ2h0bW9zdCBwbG90cykuCgpgYGB7cn0KcGxvdHNfZDRfZGV2IDwtIGNoYXJhY3Rlcl9kZXZwbG90KGRmX3Njb3JlZF9hZCA9IGQ0X2FkX3Njb3JlZF9hZCwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZl9zY29yZWRfY2ggPSBkNF80Nl9zY29yZWRfYWQsIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGZfYWdlID0gZDRfNDYpCmBgYAoKYGBge3J9CmZpZ3VyZTUuNyA8LSBwbG90c19kNF9kZXYgKwogIGxhYnModGl0bGUgPSAiU3R1ZHkgNDogQ2hpbGRyZW4sIDQtNXkiKQpgYGAKCmBgYHtyfQpmaWd1cmU1LjdfcGxvdHNfY2FwIDwtIGFkZF9zdWIoZmlndXJlNS43LCBzdHJfd3JhcCgiRmlndXJlIDUuNzogQ2hhbmdlcyBpbiBhdHRyaWJ1dGlvbnMgb2YgQk9EWSwgSEVBUlQsIGFuZCBNSU5EIGFtb25nIDQtIHRvIDUteWVhci1vbGQgY2hpbGRyZW4gaW4gU3R1ZHkgNC4gRm9yIGVhY2ggY29uY2VwdHVhbCB1bml0LCBzY29yZXMgY291bGQgcmFuZ2UgZnJvbSAwLTEuIEluZGl2aWR1YWwgY2hpbGRyZW4gYXJlIHBsb3R0ZWQgYXMgc21hbGwsIHRyYW5zbHVjZW50IGNpcmNsZXM7IG1lYW4gc2NvcmVzIGFtb25nIGFkdWx0cyBhcmUgcGxvdHRlZCBhcyBsYXJnZXIsIHNvbGlkIGRpYW1vbmRzLiBFcnJvciBiYXJzIGFyZSA5NSUgYm9vdHN0cmFwcGVkIGNvbmZpZGVuY2UgaW50ZXJ2YWxzLiBMaW5lcyBjb3JyZXNwb25kIHRvIHNpbXBsZSBsaW5lYXIgcmVncmVzc2lvbnMgKGZvcm11bGE6IHNjb3JlIH4gYWdlKS4iLCAxMTApLCB4ID0gMCwgaGp1c3QgPSAwKQpgYGAKCmBgYHtyLCBpbmNsdWRlID0gVCwgZmlnLndpZHRoID0gNSwgZmlnLmFzcCA9IDAuNX0KZ2dkcmF3KGZpZ3VyZTUuN19wbG90c19jYXApCmBgYAoKIyMgRGlzY3Vzc2lvbgoKCiMgR2VuZXJhbCBkaXNjdXNzaW9uCgoKIyBDaGFwdGVyIGNvbmNsdXNpb24KCgoKCgoKCgoKIyBTQ1JBUFMKCiMjIERvY3VtZW50aW5nIHRoZSBhcHBsaWNhdGlvbiBvciBkZXBsb3ltZW50IG9mIGNvbmNlcHR1YWwgcmVwcmVzZW50YXRpb25zIHRocm91Z2ggWFgKCltYWCBDT1JSRUNUIFRPIEJFIE5PVCBBQk9VVCBGQUNUT1IgU0NPUkVTISBjaGFuZ2UgZnJvbSBmYWN0b3Igc2NvcmVzIHRvIGVuZG9yc2VtZW50cy4gRmFjdG9yIHNjb3JlcyBkb24ndCBnaXZlIGEgc2Vuc2Ugb2YgYWJzb2x1dGVseSB5ZXMvbm8uXQoKSGF2aW5nIGluZmVycmVkIGEgY29uY2VwdHVhbCBzdHJ1Y3R1cmUgZm9yIGEgZ2l2ZW4gZ3JvdXAgb2YgcGFydGljaXBhbnRzIHZpYSBFRkEsIEkgdGhlbiBzb3VnaHQgdG8gZXhhbWluZSBhdHRyaWJ1dGlvbnMgb2YgbWVudGFsIGNhcGFjaXRpZXMgdG8gdGhlIHBhcnRpY3VsYXIgdGFyZ2V0IGNoYXJhY3RlcnMgaW5jbHVkZWQgaW4gZWFjaCBzdHVkeSB3aXRoaW4gdGhpcyBjb25jZXB0dWFsIHN0cnVjdHVyZTogVG8gd2hhdCBleHRlbnQgZGlkIHBhcnRpY2lwYW50cyBhdHRyaWJ1dGUgZWFjaCBvZiB0aGUgZnVuZGFtZW50YWwgY29tcG9uZW50cyBvZiBtZW50YWwgbGlmZSByZXZlYWxlZCBieSBFRkEgdG8gYSBnaXZlbiB0YXJnZXQgY2hhcmFjdGVyLCBhbmQgaG93IGRpZCB0aGlzIGF0dHJpYnV0aW9ucyB2YXJ5IHdpdGggYWdlIChlaXRoZXIgd2l0aGluIGFuIGFnZSBncm91cCBvciBiZXR3ZWVuIGFnZSBncm91cHMpPyAKClRvIGV4cGxvcmUgdGhpcyBxdWVzdGlvbiwgZm9yIGVhY2ggc3R1ZHkgSSBwcm9qZWN0ZWQgY2hpbGRyZW4ncyBkYXRhIGludG8gYWR1bHRzJyBjb25jZXB0dWFsIHNwYWNlIGFuZCBleGFtaW5lZCAiZmFjdG9yIHNjb3JlcyLigJRzdW1tYXJpZXMgb2YgZWFjaCBwYXJ0aWNpcGFudCdzIGF0dHJpYnV0aW9ucyBvZiBlYWNoIG9mIGZhY3RvcnMgcmV2ZWFsZWQgYnkgRUZBLiBJIHVzZWQgdGhlIGNvcnJlbGF0aW9uLXByZXNlcnZpbmcgInRlbiBCZXJnZSIgbWV0aG9kIChhcyBpbXBsZW1lbnRlZCBpbiB0aGUgInBzeWNoIiBwYWNrYWdlOyBSZXZlbGxlLCAyMDE4KSwgaW1wdXRpbmcgbWlzc2luZyB2YWx1ZXMgdXNpbmcgdGhlIG1lYW4gKGJ5IHRhcmdldCBjaGFyYWN0ZXIsIGNhcGFjaXR5LCBhbmQgYWdlIGdyb3VwKS4gVGhpcyB5aWVsZGVkIG9uZSBmYWN0b3Igc2NvcmUgZm9yIGVhY2ggb2YgKGFkdWx0cycpIGZhY3RvcnMsIGZvciBlYWNoIHBhcnRpY2lwYW50LiBJIGNvbnNpZGVyIHRoZXNlIHRvIGJlIHN1bW1hcmllcyBvZiB0aGF0IHBlcnNvbidzIGF0dHJpYnV0aW9ucyBvZiB0aGUgY29ycmVzcG9uZGluZyBsYXRlbnQgY29uc3RydWN0LgoKSSBhbmFseXplZCB0aGVzZSBmYWN0b3Igc2NvcmVzIHZpYSBtaXhlZCBlZmZlY3RzIEJheWVzaWFuIHJlZ3Jlc3Npb24gYW5hbHlzZXMgdXNpbmcgdGhlICJicm1zIiBwYWNrYWdlIGZvciBSIChCw7xya25lciwgMjAxNykuIEluIGFsbCBvZiB0aGVzZSBhbmFseXNlcywgSSBpbmNsdWRlZCB0aGUgbWF4aW1hbCByYW5kb20gZWZmZWN0IHN0cnVjdHVyZXMgZ2l2ZW4gdGhlIGRlc2lnbiBmb3IgdGhlIHJlbGV2YW50IHN0dWR5LiBGdXJ0aGVyIGRldGFpbHMgdmFyaWVkIGJ5IHN0dWR5LCBkZXBlbmRpbmcgb24gdGhlIG51bWJlciBvZiB0YXJnZXQgY2hhcmFjdGVycyBpbmNsdWRlZCBpbiB0aGF0IHN0dWR5LCB0aGUgbnVtYmVyIG9mIGZhY3RvcnMgcmV2ZWFsZWQgYnkgRUZBIGZvciB0aGUgcmVsZXZhbnQgZ3JvdXAocykgb2YgcGFydGljaXBhbnRzLCBhbmQgdGhlIGdvYWxzIG9mIHRoZSBhbmFseXNpcyAoZS5nLiwgY29tcGFyaW5nIHR3byBhZ2UgZ3JvdXBzIHZzLiBleGFtaW5pbmcgY29udGludW91cyBlZmZlY3RzIG9mIGFnZSB3aXRoaW4gb25lIG9yIG1vcmUgZ3JvdXBzIG9mIHBhcnRpY2lwYW50cykuCg==